Учитывая документ, выберите соответствующий отрывок

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

Моя первая идея состоит в том, чтобы обрезать любые ведущие предложения, которые содержат только слова в некотором списке (например, стоп-слова, плюс слова из заголовка, плюс слова от ТАК корпус, которые имеют очень слабую корреляцию с тегами, которая является, это, одинаково вероятно, произойдет в любом вопросе независимо от, он - теги),

10
задан dmcer 14 May 2010 в 00:40
поделиться

1 ответ

Автоматическое суммирование текста

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

Простой алгоритм

Простой, но достаточно эффективный алгоритм реферирования состоит в том, чтобы просто выбрать ограниченное количество предложений из исходного текста, которые содержат наиболее часто встречающиеся слова содержания (т. Е. Самые частые, не включая стоп-лист слов).

Summarizer(originalText, maxSummarySize):
   // start with the raw freqs, e.g. [(10,'the'), (3,'language'), (8,'code')...]
   wordFrequences = getWordCounts(originalText)
   // filter, e.g. [(3, 'language'), (8, 'code')...]
   contentWordFrequences = filtStopWords(wordFrequences)
   // sort by freq & drop counts, e.g. ['code', 'language'...]
   contentWordsSortbyFreq = sortByFreqThenDropFreq(contentWordFrequences)

   // Split Sentences
   sentences = getSentences(originalText)

   // Select up to maxSummarySize sentences
   setSummarySentences = {}
   foreach word in contentWordsSortbyFreq:
      firstMatchingSentence = search(sentences, word)
      setSummarySentences.add(firstMatchingSentence)
      if setSummarySentences.size() = maxSummarySize:
         break

   // construct summary out of select sentences, preserving original ordering
   summary = ""
   foreach sentence in sentences:
     if sentence in setSummarySentences:
        summary = summary + " " + sentence

   return summary

Некоторые пакеты с открытым исходным кодом, которые выполняют суммирование с использованием этого алгоритма:

Classifier4J (Java)

Если вы используете Java, вы можете использовать модуль Classifier4J SimpleSummarizer .

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

Classifier4J - это пакет Java для работы с текстом. Classifier4J включает сумматор. Summariser позволяет резюмировать текст. Сумматор действительно классный. Я не думаю, что есть какие-либо другие средства суммирования java.

Как видно из следующего фрагмента, вы можете легко создать простое резюме из одного предложения:

// Request a 1 sentence summary
String summary = summariser.summarise(longOriginalText, 1);

Используя приведенный выше алгоритм, это даст Classifier4J включает сумматор. .

NClassifier (C #)

Если вы используете C #, есть порт Classifier4J на C # под названием NClassifier

Сумматор Тристана Хавелика для NLTK (Python)

Работа над Порт Python сумматора Classifier4J, созданный с помощью Python Natural Language Toolkit (NLTK) , доступного здесь .

16
ответ дан 3 December 2019 в 21:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: