Методы НЛП относительно плохо приспособлены для работы с этим видом текста.
По-другому: вполне возможно построить решение, которое включает в себя процессы НЛП для реализации желаемого классификатора, но дополнительная сложность не даетобязательно окупается с точки зрения скорости разработки или улучшения точности классификатора.
Если кто-то действительно настаивает на использовании методов НЛП, POS-тегирование и его способность идентифицировать существительные являются наиболее очевидной идеей, но Chunking и доступ к WordNet или другой лексическойИсточниками являются другие возможные варианты использования NLTK.
Вместо этого, специальное решение, основанное на простых регулярных выражениях и некоторых эвристиках, подобных предложенным NoBugs , вероятно, является подходящим подходом к проблеме.,Конечно, такие решения несут два основных риска:
- чрезмерное соответствие части текста, рассмотренной / рассматриваемой при построении правил
- возможная путаница / сложность решения, если их слишком многовведены правила и под-правила.
Выполнение некоторого простого статического анализа для полной (или очень большой выборки) рассматриваемых текстов должно помочь при выборе нескольких эвристик, а также избежатьпереосмысление проблем.Я вполне уверен, что относительно небольшого количества правил, связанных с пользовательским словарем, должно быть достаточно для создания классификатора с соответствующей точностью, а также скоростью / ресурсами.
Несколько идей:
- Подсчитайте все слова (и, возможно, все биграммы и триграммы) в значительной части корпуса руки.Эта информация может влиять на дизайн классификатора, позволяя распределять наибольшее количество усилий и самые жесткие правила для наиболее распространенных шаблонов.
- вручную вводит краткий словарь, который связывает наиболее популярные слова с:
- их функцией POS (в основном это бинарный вопрос: т. Е. Существительные против модификаторов и другие не существительные.
- их корень синонима [если применимо]
- их класс [если применимо]
- Если шаблон подходит для большей части входного текста, рассмотрите возможность использования последнего слова передконец текста или перед первой запятой в качестве основного ключа для выбора класса. Если шаблон не удерживается, просто уделите больше внимания первому и последнему слову.
- рассмотрите первый проход, гдетекст переписывается с использованием наиболее распространенных биграмм, заменяемых одним словом (даже искусственным кодовым словом), которое будет в словаре
- , а также замените наиболее распространенные опечатки или синонимы соответствующим корнем синонимовДобавление регулярности во входные данные помогает повысить точность, а также помогает сделать несколько правил / несколько записей в словаре имеют большую отдачу от precision.
- для слов, не найденных в словаре, предположим, что слова, которые смешаны с числами и / или предшествуют числам, являются модификаторами, а не существительными.Предположим, что
- учитывает двухуровневую классификацию, в соответствии с которой входные данные, которые не могут быть правдоподобно присвоены классу, помещаются в «ручную кучу», чтобы вызвать дополнительный обзор, который приводит к дополнительным правилам и / или словарным статьям.После нескольких итераций классификатор должен все меньше и меньше улучшений и настроек.
- ищет неочевидные возможности.Например, некоторые корпуса сделаны из комбинации источников, но некоторые из источников могут включать определенные закономерности, которые помогают идентифицировать источник и / или могут быть использованы в качестве подсказок классификации.Например, некоторые источники могут содержать только, например, верхний регистр текста (или текст, как правило, длиннее 50 символов, или усеченные слова в конце и т. Д.)
Боюсь, что в этом ответе не дадут фрагментов Python / NLTK в качестве учебного пособия для решения, но, честно говоря, такие простые подходы на основе NLTK, вероятно, в лучшем случае будут разочаровывающими. Кроме того, у нас должен быть гораздо больший выборочный набор входного текста, чтобы руководствоваться при выборе правдоподобных подходов, включая те, которые основаны на методах NLTK или NLP в целом.