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

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

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

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

Чтобы создать модель мешка n-граммов, используйте bagOfNgrams. Можно вводить bagOfNgrams объекты в другие функции Symbolic Math Toolbox, такие как 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

Создайте облако слов биграмм

Создайте облако слов биграмм путем создания сначала модели bag-of-gams с помощью 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

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

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

Подгонка модели темы к сумке N-граммов

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

Создайте модель темы 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);

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

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

См. также

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

Похожие темы