Как извлечь ключевые слова, используемые в тексте? [закрытый]

Как я данные шахты кучу текста, чтобы получить ключевые слова по использованию? ("Джейкоб Смит" или "забор")

и есть ли программное обеспечение для этого уже? даже полуавтоматически, и если он может отфильтровать простые слова, такие как "the", "и", "или", то я мог бы добраться до тем быстрее.

6 ответов


общий алгоритм будет выглядеть так:

- Obtain Text
- Strip punctuation, special characters, etc.
- Strip "simple" words
- Split on Spaces
- Loop Over Split Text
    - Add word to Array/HashTable/Etc if it doesn't exist;
       if it does, increment counter for that word

конечным результатом является количество частот всех слов в тексте. Затем вы можете взять эти значения и разделить на общее количество слов, чтобы получить процент частоты. Дальнейшая обработка зависит от вас.

вы также захотите заглянуть в Stemming. Stemming используется для сокращения слов до их корня. Например going => go, cars => car, etc.

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


Это открытый вопрос в НЛП, поэтому простого ответа нет.

моя рекомендация для быстрых-и-грязных "работ-для-меня"topia.termextract.

Yahoo имеет службу извлечения ключевых слов (http://developer.yahoo.com/search/content/V1/termExtraction.html) которое низкое отозвание но высокая точность. Другими словами, он дает вам небольшое количество высококачественных терминов, но пропускает многие термины в ваших документах.

In Питон, есть топия.termextract (http://pypi.python.org/pypi/topia.termextract/). Он относительно шумный и предлагает много фиктивных ключевых слов, но он прост в использовании.

Termine (http://www.nactem.ac.uk/software/termine/) - это веб-сервис Великобритании, который также относительно шумный и предлагает много фиктивных ключевых слов. Однако мне кажется, что это несколько точнее, чем топия.termextract. YMMV.

один из способов результаты удаления шума слишком много ключевые слова (например, topia.termextract и termine) - создать словарь терминов, которые встречаются часто, а затем выбросить предлагаемые термины, которых нет в словаре. Другими словами, сделайте два прохода по корпусу: первый проход, подсчитайте частоту каждого ключевого слова. Во втором проходе отбросьте ключевые слова, которые слишком редки.

Если вы хотите написать свой собственный, возможно, лучшее введение написано парком, который сейчас находится в IBM:

  • "автоматический глоссарий добыча: от определения термина" доступна на http://portal.acm.org/citation.cfm?id=1072370
  • "извлечение и использование глоссария в системе поиска и доставки информации для технической поддержки IBM"

вот еще несколько ссылок, если вы хотите узнать больше:

  • http://en.wikipedia.org/wiki/Terminology_extraction
  • " CorePhrase: извлечение ключевой фразы для документа Кластеризация"
  • Liu et al 2009 от NAACL HLT
  • "автоматическая идентификация несоставных фраз"
  • "Интеллектуальный Анализ Данных Встречает Обнаружение Коллокаций"
  • а также множество других ссылок можно накопать на эту тему.

существует также услуга под названием Алхимия то может сделать термин-извлечение, отмечать концепции, анализ настроения и так далее.

Это действительно, я тестировал его, но я не знаю, что они коммерческие политики (если есть). Они предоставляют API для любого языка (в значительной степени).

Я где-то читал (извините, я больше не помню, где), что результат алхимии менее шумный по сравнению с теми, которые предложил Джозеф.


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

Я всегда был впечатлен примером частотного анализа слова в Расширенный Bash-Руководство Сценариев (12-11)

следующее, например, извлекает книгу из проекта Gutenburg и записывает слово частотный анализ "отчет":

wget http://www.gutenberg.org/files/20417/20417-8.txt -q -O- | 
sed -e 's/\.//g'  -e 's/\,//g' -e 's/ /\
/g' | tr 'A-Z' 'a-z' | sort | uniq -c | sort -nr > output.txt

должен быть расширяемым, чтобы исключить слова из "общего" списка (The, and, a...) так далее.


Я лично рекомендую Maui (http://code.google.com/p/maui-indexer/): он полагается на KeA, но расширяет его различными способами. Он обучаем и может использовать терминологию в формате RDF.


Я использовал NTLK для распознавать именованные сущности раньше с некоторым успехом. Он особенно хорош в распознавании имен людей и организаций.