Как реализовать резервное переключение токенизатора в RWeka?

Я использую пакеты R-tm-Rweka для некоторого анализа текста. Вместо того, чтобы строить tf-tdm по отдельным словам, что недостаточно для моих целей, я должен извлечь нграммы. Я использовал функцию @Ben TrigramTokenizer <- function(x) NGramTokenizer(x, Weka_control(min = 2, max = 3)) tdm <- TermDocumentMatrix(a, control = list(tokenize = TrigramTokenizer))
извлечь триграммы. Вывод имеет явную ошибку, см. Ниже. Он поднимает 4-, 3- и 2-словосочетания. В идеале, он должен был взять ТОЛЬКО 4-х значную словосочетание и отбросить (3- и 2-слово) остаток. Как заставить это решение, например, в Python NLTK есть опция резервного токенизатора?

абстрактная стратегия ->this is incorrect>
абстрактная стратегия доска ->incorrect
абстрактная стратегия настольная игра -> this should be the correct output

исполнительный акцент
простой акцент
простой акцент, исполнительный комментарий

Большое спасибо.

1 ответ

Решение

Я думаю, что вы были очень близки с попыткой, которую вы сделали. За исключением того, что вы должны понимать то, что вы говорили Weka сделать, чтобы захватить 2-граммовые и 3-граммовые жетоны; вот только как Weka_control был указан.

Вместо этого я бы рекомендовал использовать разные размеры токенов в разных токенизаторах и выбирать или объединять результаты в соответствии с вашими предпочтениями или правилами принятия решений.

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

Фрагмент кода для интеллектуального анализа текста:

# QuadgramTokenizer ####
QuadgramTokenizer <- function(x) NGramTokenizer(x, Weka_control(min = 4, max = 4)

за 4 грамма,

# TrigramTokenizer ####
TrigramTokenizer <- function(x) NGramTokenizer(x, Weka_control(min = 3, max = 3)

За 3 грамма и конечно

# BigramTokenizer ####
BigramTokenizer <- function(x) NGramTokenizer(x, Weka_control(min = 2, max = 2)

за 2-х грамм.

Возможно, вам удастся избежать вашей более ранней проблемы, запустив разные размеры грамм отдельно, как это вместо установки Weka_control в диапазоне.

Вы можете применить токенизатор так:

tdm.ng <- TermDocumentMatrix(ds5.1g, control = list(tokenize = BigramTokenizer))
dtm.ng <- DocumentTermMatrix(ds5.1g, control = list(tokenize = BigramTokenizer))

Если у вас все еще есть проблемы, пожалуйста, приведите воспроизводимый пример, и я буду следить за вами.

Другие вопросы по тегам