2012-04-09 38 views
10

Tôi đã sử dụng Ruby Classifier library đến classify privacy policies. Tôi đã đi đến kết luận rằng cách tiếp cận đơn giản của từ được xây dựng trong thư viện này là không đủ. Để tăng độ chính xác phân loại của tôi, tôi muốn đào tạo trình phân loại theo n-grams ngoài các từ riêng lẻ.Đào tạo Phân loại Naive Bayes trên ngram

Tôi đã tự hỏi liệu có thư viện nào ở đó để xử lý trước các tài liệu để có được các n-grams có liên quan (và xử lý đúng cách với dấu câu). Một ý nghĩ là tôi có thể xử lý trước các tài liệu và thức ăn chăn nuôi giả ngrams vào Ruby Phân loại như:

wordone_wordtwo_wordthree

Hoặc có thể có một cách tốt hơn để được làm điều này, chẳng hạn như một thư viện mà có ngram dựa trên Naive Bayes Phân loại được xây dựng vào nó từ getgo. Tôi đang mở để sử dụng các ngôn ngữ khác ngoài Ruby ở đây nếu họ nhận được công việc làm (Python có vẻ như một ứng cử viên tốt nếu cần).

Trả lời

11

Nếu bạn ổn với python, tôi muốn nói nltk sẽ là hoàn hảo cho bạn.

Ví dụ:

>>> 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')]) 

Bạn thậm chí có một phương pháp nltk.NaiveBayesClassifier

+0

câu trả lời tuyệt vời +1 – Yavar

+3

NLTK có vẻ tuyệt vời theo nhiều cách so với những gì Ruby cung cấp. Python thắng, cảm ơn bạn! – babonk

+0

@babonk niềm vui của tôi. Tôi đã tìm thấy nltk là một niềm vui để sử dụng và cực kỳ mạnh mẽ, hy vọng bạn có niềm vui với nó: D –

3
>> 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"] 

của Ruby enumerables có một phương pháp gọi là enum_cons đó sẽ trở lại mỗi n mặt hàng liên tục kể từ đếm được. Với phương pháp đó tạo ra ngrams là một lớp lót đơn giản.

+0

Thx. Đã phải sử dụng 'each_cons' thay vì' enum_cons'. – Dru

+0

Dru: Có vẻ như enum_cons đã không được chấp nhận. Thay thế nó bằng each_cons trong câu trả lời của tôi. Cảm ơn! –

Các vấn đề liên quan