Анализируйте текстовые данные Используя фразы многословные

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

N-грамма является кортежем n последовательные слова. Например, биграмма (случай, когда n=2) пара последовательных слов, таких как "проливной дождь". Униграмма (случай, когда n=1) отдельное слово. Мешок 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 перечисленный в конце примера, выполняет следующие шаги:

  1. Преобразуйте текстовые данные в нижний регистр с помощью lower.

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

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

  4. Удалите список слов остановки (такой как "и", и) использование removeStopWords.

  5. Удалите слова с 2 или меньшим количеством символов с помощью removeShortWords.

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

  7. 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

Создайте Word Cloud биграмм

Создайте облако слова биграмм первым созданием мешка 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")

Подбирайте модель темы к мешку 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

Облака слова обычно подсвечивают биграммы 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 выполняет следующие шаги в порядке:

  1. Преобразуйте текстовые данные в нижний регистр с помощью lower.

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

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

  4. Удалите список слов остановки (такой как "и", и) использование removeStopWords.

  5. Удалите слова с 2 или меньшим количеством символов с помощью removeShortWords.

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

  7. 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

Смотрите также

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

Похожие темы