Как реализовать резервное переключение токенизатора в 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))
Если у вас все еще есть проблемы, пожалуйста, приведите воспроизводимый пример, и я буду следить за вами.