Тренировка классификатора Наивного Байеса на ngrams

Я использовал библиотеку Ruby Classifier для классифицировать политики конфиденциальности, Я пришел к выводу, что простого подхода к сумме слов, встроенного в эту библиотеку, недостаточно. Чтобы повысить точность классификации, я хочу обучать классификатор на n-граммах в дополнение к отдельным словам.

Мне было интересно, есть ли там библиотека для предварительной обработки документов, чтобы получить соответствующие n-граммы (и правильно справиться с пунктуацией). Одна мысль заключалась в том, что я мог предварительно обрабатывать документы и вводить псевдограммы в Ruby Classifier, например:

wordone_wordtwo_wordthree

Или, может быть, есть лучший способ сделать это, например, библиотеку, в которой встроенная в него диаграмма Наивы Байеса, встроенная в нее из getgo. Я открыт для использования языков, отличных от Ruby, если они выполняют задание (Python кажется хорошим кандидатом, если это необходимо).

Ответ 1

Если вы в порядке с python, я бы сказал, nltk будет идеально для вас.

Например:

>>> import nltk
>>> s = "This is some sample data.  Nltk will use the words in this string to make ngrams.  I hope that this is useful.".split()
>>> model = nltk.NgramModel(2, s)
>>> model._ngrams
set([('to', 'make'), ('sample', 'data.'), ('the', 'words'), ('will', 'use'), ('some', 'sample'), ('', 'This'), ('use', 'the'), ('make', 'ngrams.'), ('ngrams.', 'I'), ('hope', 'that'
), ('is', 'some'), ('is', 'useful.'), ('I', 'hope'), ('this', 'string'), ('Nltk', 'will'), ('words', 'in'), ('this', 'is'), ('data.', 'Nltk'), ('that', 'this'), ('string', 'to'), ('
in', 'this'), ('This', 'is')])

У вас даже есть метод nltk.NaiveBayesClassifier

Ответ 2

>> s = "She sells sea shells by the sea shore"
=> "She sells sea shells by the sea shore"
>> s.split(/ /).each_cons(2).to_a.map {|x,y| x + ' ' +  y}
=> ["She sells", "sells sea", "sea shells", "shells by", "by the", "the sea", "sea shore"]

В перечислениях Ruby есть метод enum_cons, который будет возвращать каждый из n последовательных элементов из перечислимого. С помощью этого метода генерация ngrams - это простой один вкладыш.