自動テキスト要約
自動テキスト要約に興味があるようですね。問題、関連する問題、および利用可能なアルゴリズムの概要については、Das と Martin の論文A Survey on Automatic Text Summarization (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 サマライザーはないと思います。
次のスニペットに見られるように、簡単な 1 文の要約を簡単に作成できます。
// Request a 1 sentence summary
String summary = summariser.summarise(longOriginalText, 1);
上記のアルゴリズムを使用すると、 が生成されClassifier4J includes a summariser.
ます。
NClassifier (C#)
C# を使用している場合は、 NClassifierと呼ばれる Classifier4J から C# へのポートがあります。
Tristan Havelick の NLTK 用サマライザー (Python)
Python の自然言語ツールキット (NLTK)を使用して構築された Classifier4J のサマライザーの作業中の Python ポートは、こちら で入手できます。