Когда я задаю вопрос здесь, подсказки для вопроса, возвращенного автоматическим поиском, учитывая первое немного вопроса, но достойный процент их не дает текста, который больше полезен для понимания вопроса, чем заголовок. У кого-либо есть идея о том, как сделать фильтр для обрезки бесполезных битов вопроса?
Моя первая идея состоит в том, чтобы обрезать любые ведущие предложения, которые содержат только слова в некотором списке (например, стоп-слова, плюс слова из заголовка, плюс слова от ТАК корпус, которые имеют очень слабую корреляцию с тегами, которая является, это, одинаково вероятно, произойдет в любом вопросе независимо от, он - теги),
Автоматическое суммирование текста
Похоже, вас интересует автоматическое суммирование текста . Чтобы получить хороший обзор проблемы, проблем и доступных алгоритмов, взгляните на статью Даса и Мартина Обзор автоматического суммирования текста (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) , доступного здесь .