学習編:ニュース要約抽出アルゴリズム

1644 ワード

ニュースダイジェストコンテンツ抽出のアルゴリズムは次のとおりです.
1.アルゴリズムによるテキスト中の単語の計算の重要性に従い、しきい値に合致するものをキーワードとする
2.文の中の単語の重要性によって文に重要性を計算する
3.文の重要度に応じて並べ替える
4.top-k文を要約として取り出す
準備:
from nltk.tokenize import sent_tokenize,word_tokenize

from nltk.corpus import stopwords

from collections import defaultdict

from string import punctuation

from heapq import nlargest

stopwords = set(stopwords.words('english') + list(punctuation))

max_cut = 0.9

min_cut = 0.1

ここでpunctuationとnlargestについてお話しします.
punctuationは、英語の句読点と記号を含むリストです.
nlargest()関数は,スタックソート方式で1つの容器の中で最大のn個の数字を迅速に求めることができる.
ステップ1:
単語の重要度の計算:
def compute_frequencies(word_sent):
    freq = defaultdict(int)

    for s in word_sent:
        for word in s:

            if word not in stopwords:
                freq[word] += 1


    m = float(max(freq.values()))

    for w in freq.keys():
        freq[w] /= m
        if freq[w] >= max_cut or freq[w] <= min_cut:
            del freq[w]


    return freq

ステップ2:
計算文の重要性:
def summarize(text,n):

   sents = sent_tokenize(text)
   assert n <= len(sents)

   word_sent = [word_tokenize(s.lower()) for s in sents]

   freq = compute_frequencies(word_sent)

   ranking = defaultdict(int)

   for i ,word in enumerate(word_sent):

       for w in word:

           if w in freq:
               ranking[i] += freq[w]

   sents_idx = rank(ranking,n)

   return [sents[j] for j in sents_idx]
 

手順3:
並べ替え:
def rank(ranking,n):

   return nlargest(n,ranking,key=ranking.get)