exponenta event banner

bagOfWords

Описание

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

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

Создание

Описание

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

пример

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

пример

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

Входные аргументы

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

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

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

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

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

Число частот слов, соответствующих uniqueWords, указанный как матрица неотрицательных целых чисел. Стоимость counts(i,j) соответствует количеству раз, когда слово uniqueWords(j) отображается в i-ом документе.

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

Свойства

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

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

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

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

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

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

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

encodeКодировать документы как матрицу числа слов или n-граммов
tfidfМатрица Term Frequency-Inverse Document Frequency (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 с помощью хранилища данных файла.

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

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

                       Files: {
                              ' .../tpd66a0468/textanalytics-ex73762432/exampleSonnet1.txt';
                              ' .../tpd66a0468/textanalytics-ex73762432/exampleSonnet2.txt';
                              ' .../tpd66a0468/textanalytics-ex73762432/exampleSonnet3.txt'
                               ... and 1 more
                              }
                     Folders: {
                              ' .../mlx_to_docbook5/tpd66a0468/textanalytics-ex73762432'
                              }
                 UniformRead: 0
                    ReadMode: 'file'
                   BlockSize: Inf
                  PreviewFcn: @extractFileText
      SupportedOutputFormats: [1x16 string]
                     ReadFcn: @extractFileText
    AlternateFileSystemRoots: {}

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

bag = bagOfWords
bag = 
  bagOfWords with properties:

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

Закольцовывайте файлы в хранилище данных и считывайте каждый файл. Пометить текст в каждом файле и добавить документ в 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», «the» и «in», которые обычно удаляются из текста перед анализом.

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 
      ⋮

Создайте матрицу Term Frequency-Inverse Document Frequency (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);

Figure contains an object of type wordcloud.

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

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

fileLocation = fullfile(matlabroot,'examples','textanalytics','exampleSonnet*.txt');
fileInfo = dir(fileLocation)
fileInfo = 

  0x1 empty 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

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

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

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

Совет

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

Представлен в R2017b