exponenta event banner

Анализ текстовых данных с помощью многословных фраз

В этом примере показано, как анализировать текст, используя n-граммовые счетчики частоты.

N-грамм - это кортеж из n последовательных слов. Например, биграм (случай, когда n = 2) - это пара последовательных слов, таких как «обильные осадки». Униграмма (случай, когда n = 1) - единственное слово. Модель мешка n-grams записывает количество раз, когда различные n-grams появляются в коллекциях документов.

Используя модель bag-of-n-grams, можно сохранить дополнительную информацию о порядке слов в исходных текстовых данных. Например, модель мешка n-граммов лучше подходит для захвата коротких фраз, которые появляются в тексте, таких как «обильные осадки» и «грозовые ветры».

Чтобы создать модель мешка n-grams, используйте bagOfNgrams. Вы можете ввести bagOfNgrams объектов в другие функции панели инструментов аналитики текста, такие как wordcloud и fitlda.

Загрузка и извлечение текстовых данных

Загрузите данные примера. Файл factoryReports.csv содержит заводские отчеты, включая текстовое описание и категориальные метки для каждого события. Удалите строки с пустыми отчетами.

filename = "factoryReports.csv";
data = readtable(filename,'TextType','String');

Извлеките текстовые данные из таблицы и просмотрите первые несколько отчетов.

textData = data.Description;
textData(1:5)
ans = 5×1 string
    "Items are occasionally getting stuck in the scanner spools."
    "Loud rattling and banging sounds are coming from assembler pistons."
    "There are cuts to the power when starting the plant."
    "Fried capacitors in the assembler."
    "Mixer tripped the fuses."

Подготовка текстовых данных для анализа

Создайте функцию, которая маркирует и предварительно обрабатывает текстовые данные, чтобы их можно было использовать для анализа. Функция preprocessText в конце примера выполняет следующие шаги:

  1. Преобразование текстовых данных в строчные с помощью lower.

  2. Маркировка текста с помощью tokenizedDocument.

  3. Стереть пунктуацию с помощью erasePunctuation.

  4. Удалите список стоп-слов (например, «and», «of» и «the»), используя removeStopWords.

  5. Удаление слов, содержащих не более 2 символов removeShortWords.

  6. Удаление слов с 15 или более символами с помощью removeLongWords.

  7. Лемматизировать слова с помощью normalizeWords.

Используйте примерную функцию предварительной обработки. preprocessTest для подготовки текстовых данных.

documents = preprocessText(textData);
documents(1:5)
ans = 
  5×1 tokenizedDocument:

    6 tokens: item occasionally get stuck scanner spool
    7 tokens: loud rattle bang sound come assembler piston
    4 tokens: cut power start plant
    3 tokens: fry capacitor assembler
    3 tokens: mixer trip fuse

Создание облака Word из Bigrams

Создайте облако слов bigrams, сначала создав модель bag-of-n-grams с помощью bagOfNgrams, а затем ввод модели в wordcloud.

Для подсчета n-граммов длины 2 (биграмм) используйте bagOfNgrams с опциями по умолчанию.

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

          Counts: [480×941 double]
      Vocabulary: [1×351 string]
          Ngrams: [941×2 string]
    NgramLengths: 2
       NumNgrams: 941
    NumDocuments: 480

Визуализируйте модель bag-of-n-grams с помощью облака слов.

figure
wordcloud(bag);
title("Text Data: Preprocessed Bigrams")

Подбор тематической модели к сумке N-Grams

Модель LDA (Latent Dirichlet Allocation) - это модель темы, которая обнаруживает основные темы в коллекции документов и выводит вероятности слов в темах.

Создание модели раздела LDA с использованием 10 разделов fitlda. Функция подходит для модели LDA путем обработки n-граммов как отдельных слов.

mdl = fitlda(bag,10,'Verbose',0);

Визуализируйте первые четыре темы как облака слов.

figure
for i = 1:4
    subplot(2,2,i)
    wordcloud(mdl,i);
    title("LDA Topic " + i)
end

Слово «облака» выделяет обычно сопутствующие биграммы в разделах LDA. Функция отображает биграммы с размерами в соответствии с их вероятностями для указанных тем LDA.

Анализ текста с помощью более длинных фраз

Для анализа текста с использованием более длинных фраз укажите 'NGramLengths' опция в bagOfNgrams чтобы иметь большее значение.

При работе с более длинными фразами может быть полезно сохранять стоп-слова в модели. Например, чтобы обнаружить словосочетание «не счастлив», оставьте в модели стоп-слова «есть» и «нет».

Выполните предварительную обработку текста. Стереть пунктуацию с помощью erasePunctuationи выполнить токенизацию с помощью tokenizedDocument.

cleanTextData = erasePunctuation(textData);
documents = tokenizedDocument(cleanTextData);

Для подсчета n-граммов длины 3 (триграммы) используйте bagOfNgrams и указать 'NGramLengths' быть 3.

bag = bagOfNgrams(documents,'NGramLengths',3);

Визуализируйте модель bag-of-n-grams с помощью облака слов. Слово облако триграмм лучше показывает контекст отдельных слов.

figure
wordcloud(bag);
title("Text Data: Trigrams")

Просмотр 10 лучших триграмм и их счетчиков частоты с помощью topkngrams.

tbl = topkngrams(bag,10)
tbl=10×3 table
                  Ngram                   Count    NgramLength
    __________________________________    _____    ___________

    "in"       "the"         "mixer"       14           3     
    "in"       "the"         "scanner"     13           3     
    "blown"    "in"          "the"          9           3     
    "the"      "robot"       "arm"          7           3     
    "stuck"    "in"          "the"          6           3     
    "is"       "spraying"    "coolant"      6           3     
    "from"     "time"        "to"           6           3     
    "time"     "to"          "time"         6           3     
    "heard"    "in"          "the"          6           3     
    "on"       "the"         "floor"        6           3     

Пример функции предварительной обработки

Функция preprocessText выполняет следующие шаги по порядку:

  1. Преобразование текстовых данных в строчные с помощью lower.

  2. Маркировка текста с помощью tokenizedDocument.

  3. Стереть пунктуацию с помощью erasePunctuation.

  4. Удалите список стоп-слов (например, «and», «of» и «the»), используя removeStopWords.

  5. Удаление слов, содержащих не более 2 символов removeShortWords.

  6. Удаление слов с 15 или более символами с помощью removeLongWords.

  7. Лемматизировать слова с помощью normalizeWords.

function documents = preprocessText(textData)

% Convert the text data to lowercase.
cleanTextData = lower(textData);

% Tokenize the text.
documents = tokenizedDocument(cleanTextData);

% Erase punctuation.
documents = erasePunctuation(documents);

% Remove a list of stop words.
documents = removeStopWords(documents);

% Remove words with 2 or fewer characters, and words with 15 or greater
% characters.
documents = removeShortWords(documents,2);
documents = removeLongWords(documents,15);

% Lemmatize the words.
documents = addPartOfSpeechDetails(documents);
documents = normalizeWords(documents,'Style','lemma');

end

См. также

| | | | | | | | | | | |

Связанные темы