2016-04-12 2 views
2

В настоящее время я работаю над проектом в Python, который полагается на получение файла csv. Файл csv содержит более нескольких тысяч случайных предложений с некоторым сходством между некоторыми. Цель моего кода - определить, какие предложения являются подобными, и ссылаться на один и тот же контекст контекста.Группировка похожих строк предложений в файле csv

Например, все предложения, которые относятся к Gmail, такие как:

Gmail login 
Gmail account login 
Gmail account register 

относятся к тому же контексте, но могут быть очень далеки друг от друга в файле ввода, вложенными между несвязанными предложений, относящихся к различным условиям. Мой метод я использовал до сих пор является:

  1. Сортировать каждое слово в предложении по алфавиту и строчные буквы, такие как:

    счет Gmail Войти

  2. Сделать свой первоначальный индекс в файле его собственный столбец, сортируйте предложения по алфавиту в файле csv, а затем загрузите их в файл данных pandas

  3. Iterte через dataframe и сравните предложения друг с другом. Это делается с помощью метода token_set_ratio FuzzyWuzzy's, чтобы идентифицировать термины, которые соответствуют друг другу (равенство == 100), похожие слова сгруппированы вместе, а затем записаны в файл.

  4. Когда прокручивается дата-рамка, мы затем повторяем его и сопоставляем индекс, который мы сделали, в свой собственный столбец, в соответствующую строку во входном файле, чтобы вернуть исходное предложение.

Этот подход был многообещающим, но он страдает от плохих совпадений и предложений, не имеющих одного и того же контекста, попадающего в ту же группу. Есть ли лучший способ, который делает то, что я хочу сделать?

ответ

2

Существует множество способов реализации анализа подобия документа, исходящего из поля анализа текста/добычи.

В вашем случае у вас есть документы (строки) слов, которые стандартизированы. Затем вы можете выполнить сравнение документов, не сравнивая слова по триграммным сходствам расстояния Левенштейна.

В принципе, используйте inverted file для хранения условий, а выполнение cosine similarity in the vector model - это простой и эффективный метод обнаружения сходства документов.

Использование некоторых других методов, или distance/similarity scores, позволяет уточнить результаты.

EDIT: модуль python, gensim, реализует модель векторного пространства и, по-видимому, хорошо известен. NLTK - хорошо известная структура для анализа естественного языка и предоставляет множество функций для такого рода работ.