To bardzo duży temat - oprócz odpowiedzi, które ludzie wymieniają tutaj, polecam wyśledzenie sylabusów dla kilku klas pobierania informacji i sprawdzenie podręczników i dokumentów przeznaczonych dla nich. To powiedziawszy, oto krótki przegląd z moich własnych dni szkolnych:
Najprostsze podejście nazywa się bag of words. Każdy dokument jest zredukowany do rzadkiego wektora par {word: wordcount}
i możesz rzucić klasyfikator NaiveBayes (lub inny) na zestaw wektorów, który reprezentuje twój zestaw dokumentów, lub oblicz wyniki podobieństwa między każdą torbą i każdą inną torbą (to jest nazywana klasyfikacją k-najbliższego sąsiada). KNN jest szybki do wyszukiwania, ale wymaga macierzy wyników O (n^2); jednak na blogu n nie jest zbyt duży. Dla czegoś wielkości dużej gazety, KNN szybko staje się niepraktyczny, więc czasami algorytm klasyfikacji w locie jest lepszy. W takim przypadku możesz wziąć pod uwagę ranking support vector machine. Maszyny SVM są zgrabne, ponieważ nie ograniczają cię do podobieństwa liniowego i wciąż są dość szybkie.
Stemming jest częstym krokiem preprocesyjnym dla technik work-of-words; polega to na zmniejszaniu morfologicznie powiązanych słów, takich jak "kot" i "koty", "Bob" i "Bob", lub "podobnie" i "podobnie", aż do ich korzeni przed obliczeniem worka słów. Istnieje wiele różnych algorytmów rozstrzygania; strona Wikipedii zawiera linki do kilku implementacji.
Jeśli podobieństwo w woreczku słów nie jest wystarczająco dobre, można je zrównać do podobieństwa w woreczku N-gramów, w którym tworzy się wektor reprezentujący dokument oparty na parach lub potrójnych słowach . (Możesz użyć 4-tek, a nawet większych krotek, ale w praktyce to niewiele pomoże). Ma to tę wadę, że generuje dużo większe wektory, a klasyfikacja będzie wymagała więcej pracy, ale dopasowania, które otrzymasz, będą znacznie bliższe składniowo. OTOH, prawdopodobnie nie potrzebujesz tego dla semantycznego podobieństwa; to jest lepsze dla rzeczy takich jak wykrywanie plagiatu. Można również zastosować redukcję dokumentu do lekkich parse drzew (istnieją algorytmy klasyfikacji drzew), ale jest to bardziej użyteczne w przypadku problemów takich jak problem autorstwa ("dany dokument o nieznanym pochodzeniu, kto go napisał?").).
Być może bardziej przydatny w przypadku użycia jest eksploracja koncepcji, która obejmuje odwzorowywanie słów na pojęcia (przy użyciu tezaurusa, takiego jak WordNet), a następnie klasyfikowanie dokumentów na podstawie podobieństwa między używanymi pojęciami. Często kończy się to bardziej wydajną niż opartą na słowie klasyfikacją podobieństwa, ponieważ odwzorowywanie słów do pojęć ma charakter redukcyjny, ale etap przetwarzania wstępnego może być dość czasochłonny.
Wreszcie jest discourse parsing, który obejmuje analizowanie dokumentów dla ich struktury semantycznej; możesz uruchamiać klasyfikatory podobieństwa na drzewach dyskursu w taki sam sposób, jak w przypadku porcji dokumentów.
Obejmują one generowanie metadanych z nieustrukturyzowanego tekstu; wykonywanie bezpośrednich porównań między surowymi blokami tekstu jest trudne, więc ludzie najpierw przetwarzają dokumenty w metadane.
Okazuję się być okropnym taggerem. Edycja tagów jest bardzo mile widziana. – kch
Zapoznaj się z contest.github.com, gdzie znajdziesz mnóstwo rozwiązań open-source na podobny problem. –
gotowe, uzupełnij przykład z Ruby. – akuhn