bagOfWords

Модель сумки слов

Описание

Модель сумки слов (также известный как счетчик частоты термина) записывает число раз, что слова появляются в каждом документе набора.

bagOfWords не разделяет текст в слова. Чтобы создать массив маркируемых документов, смотрите tokenizedDocument.

Создание

Синтаксис

bag = bagOfWords
bag = bagOfWords(documents)
bag = bagOfWords(uniqueWords,counts)

Описание

bag = bagOfWords создает пустую модель сумки слов.

пример

bag = bagOfWords(documents) считает слова, появляющиеся в documents, и возвращает модель сумки слов.

пример

bag = bagOfWords(uniqueWords,counts) создает модель сумки слов использование слов в uniqueWords и соответствующего подсчета частот в counts.

Входные параметры

развернуть все

Введите документы, заданные как массив tokenizedDocument, массив строк слов или массив ячеек из символьных векторов. Если documents является массивом строк или массивом ячеек из символьных векторов, то это должен быть вектор - строка, представляющий единый документ, где каждый элемент является словом.

Уникальный список слов, заданный как вектор строки или массив ячеек из символьных векторов. Если uniqueWords содержит <missing>, то функция игнорирует отсутствующие значения. Размер uniqueWords должен быть 1 V, где V количество столбцов counts.

Пример: ["an" "example" "list"]

Типы данных: string | cell

Подсчет частот слов, соответствующих uniqueWords, заданному как матрица неотрицательных целых чисел. Значение counts(i,j) соответствует числу раз слово uniqueWords(j), появляется в i th документ.

counts должен иметь столбцы numel(uniqueWords).

Свойства

развернуть все

Подсчеты слов на документ, заданный как разреженная матрица.

Количество документов, замеченных, заданных как неотрицательное целое число.

Количество слов в модели, заданной как неотрицательное целое число.

Уникальные слова в модели, заданной как вектор строки.

Типы данных: string

Функции объекта

encodeЗакодируйте документы как матрицу количеств n-граммы или слова
tfidfНазовите Обратную Частотой Частоту Документа (tf-idf) матрицей
topkwordsБольшинство важных слов в модели сумки слов или теме LDA
addDocumentДобавьте документы сумке слов или мешку n модели граммов
removeDocumentУдалите документы из сумки слов или мешка n модели граммов
removeEmptyDocumentsУдалите пустые документы из маркируемого массива документа, модель сумки слов или мешок n модели граммов
removeWordsУдалите выбранные слова из модели сумки слов или документов
removeInfrequentWordsУдалите слова с низкими количествами из модели сумки слов
joinОбъедините несколько сумка слов или мешок n моделей граммов
wordcloudСоздайте график облака слова из текста, модели сумки слов, мешка n модели граммов или модели LDA

Примеры

свернуть все

Загрузите данные в качестве примера. Файл sonnetsPreprocessed.txt содержит предварительно обработанные версии сонетов Шекспира. Файл содержит один сонет на строку со словами, разделенными пробелом. Извлеките текст от sonnetsPreprocessed.txt, разделите текст в документы в символах новой строки, и затем маркируйте документы.

filename = "sonnetsPreprocessed.txt";
str = extractFileText(filename);
textData = split(str,newline);
documents = tokenizedDocument(textData);

Создайте модель сумки слов использование bagOfWords.

bag = bagOfWords(documents)
bag = 
  bagOfWords with properties:

          Counts: [154x3092 double]
      Vocabulary: [1x3092 string]
        NumWords: 3092
    NumDocuments: 154

Просмотрите лучшие 10 слов и их общие количества.

tbl = topkwords(bag,10)
tbl=10×2 table
     Word      Count
    _______    _____

    "thy"       281 
    "thou"      234 
    "love"      162 
    "thee"      161 
    "doth"       88 
    "mine"       63 
    "shall"      59 
    "eyes"       56 
    "sweet"      55 
    "time"       53 

Создайте модель сумки слов использование массива строк уникальных слов и матрицы подсчетов слов.

uniqueWords = ["a" "an" "another" "example" "final" "sentence" "third"];
counts = [ ...
    1 2 0 1 0 1 0;
    0 0 3 1 0 4 0;
    1 0 0 5 0 3 1;
    1 0 0 1 7 0 0];
bag = bagOfWords(uniqueWords,counts)
bag = 
  bagOfWords with properties:

          Counts: [4x7 double]
      Vocabulary: [1x7 string]
        NumWords: 7
    NumDocuments: 4

Если ваши текстовые данные содержатся в нескольких файлах в папке, то можно импортировать текстовые данные в MATLAB с помощью datastore файла.

Создайте datastore файла для текстовых файлов сонета в качестве примера. Сонеты в качестве примера имеют имена файлов "exampleSonnetN.txt", где N является количеством сонета. Задайте функцию чтения, чтобы быть extractFileText.

readFcn = @extractFileText;
fds = fileDatastore('exampleSonnet*.txt','ReadFcn',readFcn)
fds = 
  FileDatastore with properties:

                       Files: {
                              ' .../tpc9f2555f/textanalytics-ex73762432/exampleSonnet1.txt';
                              ' .../tpc9f2555f/textanalytics-ex73762432/exampleSonnet2.txt';
                              ' .../tpc9f2555f/textanalytics-ex73762432/exampleSonnet3.txt'
                               ... and 1 more
                              }
                 UniformRead: 0
                    ReadMode: 'file'
                   BlockSize: Inf
                  PreviewFcn: @extractFileText
                     ReadFcn: @extractFileText
    AlternateFileSystemRoots: {}

Создайте пустую модель сумки слов.

bag = bagOfWords
bag = 
  bagOfWords with properties:

          Counts: []
      Vocabulary: [1x0 string]
        NumWords: 0
    NumDocuments: 0

Цикл по файлам в datastore и считал каждый файл. Маркируйте текст в каждом файле и добавьте документ bag.

while hasdata(fds)
    str = read(fds);
    document = tokenizedDocument(str);
    bag = addDocument(bag,document);
end

Просмотрите обновленную модель сумки слов.

bag
bag = 
  bagOfWords with properties:

          Counts: [4x276 double]
      Vocabulary: [1x276 string]
        NumWords: 276
    NumDocuments: 4

Удалите слова остановки из модели сумки слов путем введения списка слов остановки к removeWords. Остановитесь слова являются словами, такими как "a", и "в" котором обычно удаляются из текста перед анализом.

documents = tokenizedDocument([
    "an example of a short sentence" 
    "a second short sentence"]);
bag = bagOfWords(documents);
newBag = removeWords(bag,stopWords)
newBag = 
  bagOfWords with properties:

          Counts: [2x4 double]
      Vocabulary: ["example"    "short"    "sentence"    "second"]
        NumWords: 4
    NumDocuments: 2

Составьте таблицу самых частых слов модели сумки слов.

Загрузите данные в качестве примера. Файл sonnetsPreprocessed.txt содержит предварительно обработанные версии сонетов Шекспира. Файл содержит один сонет на строку со словами, разделенными пробелом. Извлеките текст от sonnetsPreprocessed.txt, разделите текст в документы в символах новой строки, и затем маркируйте документы.

filename = "sonnetsPreprocessed.txt";
str = extractFileText(filename);
textData = split(str,newline);
documents = tokenizedDocument(textData);

Создайте модель сумки слов использование bagOfWords.

bag = bagOfWords(documents) 
bag = 
  bagOfWords with properties:

          Counts: [154x3092 double]
      Vocabulary: [1x3092 string]
        NumWords: 3092
    NumDocuments: 154

Найдите лучшие пять слов.

T = topkwords(bag);

Найдите лучшие 20 слов в модели.

k = 20;
T = topkwords(bag,k)
T=20×2 table
      Word      Count
    ________    _____

    "thy"        281 
    "thou"       234 
    "love"       162 
    "thee"       161 
    "doth"        88 
    "mine"        63 
    "shall"       59 
    "eyes"        56 
    "sweet"       55 
    "time"        53 
    "beauty"      52 
    "nor"         52 
    "art"         51 
    "yet"         51 
    "o"           50 
    "heart"       50 
      ⋮

Создайте Частоту Документа Инверсии Частоты Термина (tf-idf) матрица из модели сумки слов.

Загрузите данные в качестве примера. Файл sonnetsPreprocessed.txt содержит предварительно обработанные версии сонетов Шекспира. Файл содержит один сонет на строку со словами, разделенными пробелом. Извлеките текст от sonnetsPreprocessed.txt, разделите текст в документы в символах новой строки, и затем маркируйте документы.

filename = "sonnetsPreprocessed.txt";
str = extractFileText(filename);
textData = split(str,newline);
documents = tokenizedDocument(textData);

Создайте модель сумки слов использование bagOfWords.

bag = bagOfWords(documents)
bag = 
  bagOfWords with properties:

          Counts: [154x3092 double]
      Vocabulary: [1x3092 string]
        NumWords: 3092
    NumDocuments: 154

Создайте tf-idf матрицу. Просмотрите первые 10 строк и столбцов.

M = tfidf(bag);
full(M(1:10,1:10))
ans = 10×10

    3.6507    4.3438    2.7344    3.6507    4.3438    2.2644    3.2452    3.8918    2.4720    2.5520
         0         0         0         0         0    4.5287         0         0         0         0
         0         0         0         0         0         0         0         0         0    2.5520
         0         0         0         0         0    2.2644         0         0         0         0
         0         0         0         0         0    2.2644         0         0         0         0
         0         0         0         0         0    2.2644         0         0         0         0
         0         0         0         0         0         0         0         0         0         0
         0         0         0         0         0         0         0         0         0         0
         0         0         0         0         0    2.2644         0         0         0    2.5520
         0         0    2.7344         0         0         0         0         0         0         0

Загрузите данные в качестве примера. Файл sonnetsPreprocessed.txt содержит предварительно обработанные версии сонетов Шекспира. Файл содержит один сонет на строку со словами, разделенными пробелом. Извлеките текст от sonnetsPreprocessed.txt, разделите текст в документы в символах новой строки, и затем маркируйте документы.

filename = "sonnetsPreprocessed.txt";
str = extractFileText(filename);
textData = split(str,newline);
documents = tokenizedDocument(textData);

Создайте модель сумки слов использование bagOfWords.

bag = bagOfWords(documents)
bag = 
  bagOfWords with properties:

          Counts: [154x3092 double]
      Vocabulary: [1x3092 string]
        NumWords: 3092
    NumDocuments: 154

Визуализируйте модель сумки слов использование облака слова.

figure
wordcloud(bag);

Если ваши текстовые данные содержатся в нескольких файлах в папке, то можно импортировать текстовые данные и создать модель сумки слов в параллели с помощью parfor. Если вам установили Parallel Computing Toolbox™, то цикл parfor запускается параллельно, в противном случае, это запускается в сериале. Используйте join, чтобы объединить массив моделей сумки слов в одну модель.

Создайте модель сумки слов из набора файлов. Сонеты в качестве примера имеют имена файлов "exampleSonnetN.txt", где N является количеством сонета. Получите список файлов и их местоположений с помощью dir.

fileLocation = fullfile(matlabroot,'examples','textanalytics','exampleSonnet*.txt');
fileInfo = dir(fileLocation)
fileInfo = 5x1 struct array with fields:
    name
    folder
    date
    bytes
    isdir
    datenum

Инициализируйте пустую модель сумки слов и затем цикл по файлам и создайте массив моделей сумки слов.

bag = bagOfWords;

numFiles = numel(fileInfo);
parfor i = 1:numFiles
    f = fileInfo(i);
    filename = fullfile(f.folder,f.name);
    
    textData = extractFileText(filename);
    document = tokenizedDocument(textData);
    bag(i) = bagOfWords(document);
end
Starting parallel pool (parpool) using the 'local' profile ...
Connected to the parallel pool (number of workers: 12).

Объедините модели сумки слов с помощью join.

bag = join(bag)
bag = 
  bagOfWords with properties:

          Counts: [5x3275 double]
      Vocabulary: [1x3275 string]
        NumWords: 3275
    NumDocuments: 5

Советы

  • Если вы намереваетесь использовать протянутый набор тестов для своей работы, то раздел ваши текстовые данные перед использованием bagOfWords. В противном случае модель сумки слов может сместить ваш анализ.

Введенный в R2017b