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