Как поддерживать нграммы в кванте dfm? - PullRequest
0 голосов
/ 05 августа 2020

Я использую quanteda для создания матрицы характеристик документа (dfm) из объекта токенов. Мой объект токенов содержит много нграмм (например, «united_states»). Когда я создаю dfm с помощью функции dfm (), мои ngrams разделяются нижним подчеркиванием («united_states» разделяется на «объединенные» «состояния»). Как я могу создать dfm, сохраняя мои ngrams?

Вот мой процесс:

my_tokens <- tokens(my_corpus, remove_symbols=TRUE, remove_punct = TRUE, remove_numbers = TRUE)
my_tokens <- tokens_compound(pattern=phrase(my_ngrams))
my_dfm <- dfm(my_tokens, stem= FALSE, tolower=TRUE)

Я вижу "united_states" в my_tokens, но в dfm он становится "объединенным" и "состояниями" "как отдельные жетоны.

Спасибо за любую помощь, которую вы можете предложить!

1 Ответ

1 голос
/ 10 августа 2020

Неясно, какую версию quanteda вы используете, но в основном это должно работать, поскольку токенизатор по умолчанию (из tokens()) не будет разделять слова, содержащие внутренний _.

Демонстрация:

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

# tokens() will not separate _ words
tokens("united_states")
## Tokens consisting of 1 document.
## text1 :
## [1] "united_states"

Вот воспроизводимый пример фразы «Соединенные Штаты»:

my_corpus <- tail(data_corpus_inaugural, 3)

# show that the phrase exists
head(kwic(my_corpus, phrase("united states"), window = 2))
##                                                                  
##  [2009-Obama, 2685:2686]   bless the | United States | of America
##      [2013-Obama, 13:14]      of the | United States | Congress, 
##  [2013-Obama, 2313:2314] bless these | United States | of America
##    [2017-Trump, 347:348]       , the | United States | of America
##  [2017-Trump, 1143:1144]      to the | United States | of America

my_tokens <- tokens(my_corpus,
  remove_symbols = TRUE,
  remove_punct = TRUE, remove_numbers = TRUE
)
my_tokens <- tokens_compound(my_tokens, pattern = phrase("united states"))
my_dfm <- dfm(my_tokens, stem = FALSE, tolower = TRUE)

dfm_select(my_dfm, "*_*")
## Document-feature matrix of: 3 documents, 1 feature (0.0% sparse) and 4 docvars.
##             features
## docs         united_states
##   2009-Obama             1
##   2013-Obama             2
##   2017-Trump             2
...