В этом примере показано, как анализировать текст, используя n-граммовые счетчики частоты.
N-грамм - это кортеж из последовательных слов. Например, биграм (случай, когда 2) - это пара последовательных слов, таких как «обильные осадки». Униграмма (случай, = 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 в конце примера выполняет следующие шаги:
Преобразование текстовых данных в строчные с помощью lower.
Маркировка текста с помощью tokenizedDocument.
Стереть пунктуацию с помощью erasePunctuation.
Удалите список стоп-слов (например, «and», «of» и «the»), используя removeStopWords.
Удаление слов, содержащих не более 2 символов removeShortWords.
Удаление слов с 15 или более символами с помощью removeLongWords.
Лемматизировать слова с помощью 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
Создайте облако слов 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")
Модель 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 выполняет следующие шаги по порядку:
Преобразование текстовых данных в строчные с помощью lower.
Маркировка текста с помощью tokenizedDocument.
Стереть пунктуацию с помощью erasePunctuation.
Удалите список стоп-слов (например, «and», «of» и «the»), используя removeStopWords.
Удаление слов, содержащих не более 2 символов removeShortWords.
Удаление слов с 15 или более символами с помощью removeLongWords.
Лемматизировать слова с помощью 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
addPartOfSpeechDetails | bagOfNgrams | bagOfWords | erasePunctuation | fitlda | ldaModel | normalizeWords | removeLongWords | removeShortWords | removeStopWords | tokenizedDocument | topkngrams | wordcloud