Есть ли лучший способ игнорировать множественное число, чем "stem = TRUE" в dfm? - PullRequest
0 голосов
/ 20 апреля 2019

Я предварительно обрабатываю свои данные для запуска модели LDA.Мне было интересно, есть ли лучший способ игнорировать множественное число (например, "ставки", "скорость", "страна", "страны"), чем использовать "stem = TRUE"?Я не хочу использовать все слова, а только некоторые конкретные слова, которые часто встречаются либо во множественном, либо в единственном числе.

Любой намек?

Я пробовал с "stem = TRUE", и я также создал словарьи использовал "dictonary=dict" в коде dfm, но он явно охватывает только слова из словаря.

1 Ответ

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

Лучший способ сделать это - использовать инструмент для обозначения существительных во множественном числе, а затем преобразовать их в единственное число.В отличие от решения для стеммера, в нем не используются такие слова, как stemming до stem или быстро до quick и т. Д.

Я рекомендую использовать для этого пакет spacyr , который прекрасно интегрируется с quanteda .Вот пример:

library("quanteda")
## Package version: 1.4.3

library("spacyr")

txt <- c(
  "Plurals in English can include irregular words such as stimuli.",
  "One mouse, two mice, one house, two houses."
)
txt_parsed <- spacy_parse(txt, tag = TRUE)
## Found 'spacy_condaenv'. spacyr will use this environment
## successfully initialized (spaCy Version: 2.1.3, language model: en)
## (python options: type = "condaenv", value = "spacy_condaenv")
txt_parsed
##    doc_id sentence_id token_id     token     lemma   pos tag     entity
## 1   text1           1        1   Plurals    plural  NOUN NNS           
## 2   text1           1        2        in        in   ADP  IN           
## 3   text1           1        3   English   English PROPN NNP LANGUAGE_B
## 4   text1           1        4       can       can  VERB  MD           
## 5   text1           1        5   include   include  VERB  VB           
## 6   text1           1        6 irregular irregular   ADJ  JJ           
## 7   text1           1        7     words      word  NOUN NNS           
## 8   text1           1        8      such      such   ADJ  JJ           
## 9   text1           1        9        as        as   ADP  IN           
## 10  text1           1       10   stimuli  stimulus  NOUN NNS           
## 11  text1           1       11         .         . PUNCT   .           
## 12  text2           1        1       One       one   NUM  CD CARDINAL_B
## 13  text2           1        2     mouse     mouse  NOUN  NN           
## 14  text2           1        3         ,         , PUNCT   ,           
## 15  text2           1        4       two       two   NUM  CD CARDINAL_B
## 16  text2           1        5      mice     mouse  NOUN NNS           
## 17  text2           1        6         ,         , PUNCT   ,           
## 18  text2           1        7       one       one   NUM  CD CARDINAL_B
## 19  text2           1        8     house     house  NOUN  NN           
## 20  text2           1        9         ,         , PUNCT   ,           
## 21  text2           1       10       two       two   NUM  CD CARDINAL_B
## 22  text2           1       11    houses     house  NOUN NNS           
## 23  text2           1       12         .         . PUNCT   .

# replace token with lemma for plural nouns
txt_parsed$token <- ifelse(txt_parsed$tag == "NNS",
  txt_parsed$lemma,
  txt_parsed$token
)

(Конечно, есть много способов выполнить эту условную замену, включая dplyr .)

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

dfmat <- dfm(as.tokens(txt_parsed), remove_punct = TRUE)
dfmat
## Document-feature matrix of: 2 documents, 14 features (50.0% sparse).
## 2 x 14 sparse Matrix of class "dfm"
##        features
## docs    plural in english can include irregular word such as stimulus one
##   text1      1  1       1   1       1         1    1    1  1        1   0
##   text2      0  0       0   0       0         0    0    0  0        0   2
##        features
## docs    mouse two house
##   text1     0   0     0
##   text2     2   2     2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...