Как найти темы и фразы (глаголы / прилагательные), которые сгруппированы с определенным словом? - PullRequest
0 голосов
/ 21 февраля 2019

У меня большой набор аккуратных данных со столбцами, содержащими текстовые ответы (например, в заявке на грант) и строками в виде отдельной организации, подающей заявку на грант.Я пытаюсь найти темы и фразы, сгруппированные по определенному слову (например, «спонсор» / «финансирование»).Более конкретно, какие прилагательные и глаголы группируются с этими жетонами?

Например,

text <- "This funding would help us create a new website and hire talented people."

Таким образом, «финансирование» может быть сгруппировано с глаголами типа «создать», «нанять» и прилагательными, такими как «новый сайт», «талантливые люди».

Я делаю это в R. У кого-нибудь есть пакет или программа, в которой они рекомендуют это делать?Я нашел cleanNLP, но не уверен, что это самый удобный пакет.Нужно ли мне токенизировать все слова?Если да, то не возникнут ли у меня проблемы с группировкой фраз?

Я довольно плохо знаком с NLP / интеллектуальным анализом текста, поэтому прошу прощения за вводный вопрос.

Спасибо!

1 Ответ

0 голосов
/ 21 февраля 2019

Это огромная область для начала изучения.

Я бы настоятельно рекомендовал взглянуть на книгу и пакет материалов по tidytextmining, а также на личные блоги авторов (https://juliasilge.com, http://varianceexplained.org) Существует огромное количество отличной работы, которая поможет вам начать, и она действительно хорошо написана для новичков в NLP.

Также очень полезны для вас библиотеки библиотек widyr и udpipe.

Вот пара примеров: используя widyr, мы можем посмотреть попарно pmi между словом, скажем, финансирование и всеми другими словами, с которыми оно имеет какое-либо отношение. Для получения информации о PMI проверьте: https://stackoverflow.com/a/13492808/2862791

library(tidytext)
library(tidyverse)
texts <- tibble(text = c('This funding would help us create a new website and hire talented people',
                         'this random funding function talented people',
                         'hire hire hire new website funding',
                         'fun fun fun for all'))


tidy_texts %>%
        pairwise_pmi(word, id) %>%
        filter(item1 == 'funding') %>% 
        top_n(5, wt = pmi) %>%
        arrange(desc(pmi))

 item1   item2        pmi
   <chr>   <chr>      <dbl>
 1 funding this     -0.0205
 2 funding would    -0.0205
 3 funding help     -0.0205
 4 funding us       -0.0205

Итак, чтобы ввести прилагательные и фразы, вы можете посмотреть на udpipe, как подсказал Боски. Я собираюсь воспроизвести вышеупомянутое и для расчета PMI, поскольку это действительно интуитивно понятный и быстрый способ вычисления метрики

library(udpipe)
english <- udpipe_download_model(language = "english")
ud_english <- udpipe_load_model(english$file_model)

tagged <- udpipe_annotate(ud_english, x = texts$text)
tagged_df <- as.data.frame(tagged)


tagged_df %>%
        filter(upos == 'ADJ' | 
                       token == 'funding') %>%
        pairwise_pmi(token, doc_id) %>%
        filter(item1 == 'funding')


  item1   item2      pmi
  <chr>   <chr>    <dbl>
1 funding new      0.170
2 funding talented 0.170

Вы упомянули cleanNLP, которая является отличной библиотекой для такого рода работы. Она упрощает доступ к udpipe, spacyr и нескольким другим методам.которые делают вид токенизации и тегирования, необходимых для этого прилагательного.

Если вы можете пройти мимо настроек, spacyr - мой предпочтительный вариант только потому, что он самый быстрый, но если скорость не проблема, я бы простоиспользуйте udpipe, поскольку он очень прост в использовании.

Нужно ли мне токенизировать все слова?Если да, то не возникнут ли у меня проблемы с группировкой фраз?

Так что у udpipe и других текстовых аннотаторов есть решение для этого.В UDPIPE вы можете использовать "Keywords_collocation ()", который идентифицирует слова, которые встречаются вместе чаще, чем ожидалось, случайным образом.

Нам нужен текстовый набор данных больше, чем три ненужных предложения, которые я написал выше, чтобы получить воспроизводимый пример.

Но вы можете многое узнать через этот блог: https://bnosac.github.io/udpipe/docs/doc7.html

Извините, этот ответ является своего рода набором ссылок ... но, как я уже сказал, это огромная область изучения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...