Ответ 1
Автоматическое суммирование текста
Похоже, вас интересует автоматическое суммирование текста. Для хорошего обзора проблемы, проблем и доступных алгоритмов взгляните на документ Das and Martin Обзор по автоматическому суммированию текста (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 для работы с текстом. В классификатор4J включен сумматор. Сумматор позволяет суммировать текст. Саммитатор действительно классный. Я не думаю, что есть какие-то другие java-компиляторы.
Как видно из следующего фрагмента, вы можете легко создать простое резюме предложения:
// Request a 1 sentence summary
String summary = summariser.summarise(longOriginalText, 1);
Используя вышеприведенный алгоритм, это приведет к Classifier4J includes a summariser.
.
NClassifier (С#)
Если вы используете С#, есть порт Classifier4J to С#, называемый NClassifier
Сумматор Tristan Havelick для NLTK (Python)
Там находится незавершенный Python порт компилятора Classifier4J, построенный с помощью Python Набор инструментов Natural Language Toolkit (NLTK) здесь.