1. HOME
  2. ブログ
  3. IT技術
  4. Javaで簡単な英文自動要約(Automatic English Text Summarization)プログラムを作る

Javaで簡単な英文自動要約(Automatic English Text Summarization)プログラムを作る

Java で簡単な「英文自動要約プログラム」を作る

ニュースやオンライン資料の長い英文を読む時に、時間とそれなりの努力が必要になると思います。

そしていざ読んでみると、自分の欲しい情報ではなく、「貴重な時間は無駄に使ってしまったな」と感じた事あるのでは?

そんな時は「自動英文要約」があれば、役に立つのではないでしょうか!

こちらの記事もオススメ!


抽出的要約メソッド

文章自動要約の種類は、おおむね2つのやり方で区別されます。

それは「抽出的要約」と「生成的要約」です。

今回は「抽出的要約」の方法で、シンプルな英文自動要約プログラムを作ってみたいと思います!

必要なツールとライブラリ

まず、必要なツールとライブラリを揃えましょう。

英文の stopwordsファイル

こちらはテキストファイルの形で、下記サイトよりダウンロードできます。

【ダウンロードサイト】
https://gist.github.com/sebleier/554280

opennlp-tools-1.9.2.jar

このライブライは jarファイルの形で、「Apache OpenNLP」のウェブサイトからダウンロード出来ます。

下記の URL より、zipファイルをダウンロードしてください。

「opennlp-tools-1.9.2.jar」は、この zipファイル内に含まれています。

【ダウンロードサイト】
https://www.apache.org/dyn/closer.cgi/opennlp/opennlp-1.9.2/apache-opennlp-1.9.2-bin.zip

en-sent.bin とen-token.bin

これらのファイルも、「Apache OpenNLP」のウェブサイトからダウンロード出来ます。

【ダウンロードサイト】
http://opennlp.sourceforge.net/models-1.5/

JavaのIDE

JavaのIDEとしては、「www.jetbrains.com」の「Intellij IDEAを使っています

下のURLから、コミュニティ版が無料でダウンロードできます。

【ダウンロードサイト】
https://www.jetbrains.com/idea/download/

Java は、Oracle版の JDK 8 を使用しています。

直接、Oracle のダウンロードページからダウンロードして下さい。

尚、Java のインストール方法や Intellij IDEA のインストールと使い方は、過去の記事などを参照にしていただければ!

関連記事

関連サイト

【Intellij IDEA公式サイト】
https://www.jetbrains.com/idea/

【Intellij IDEA 日本の販売代理店】
https://samuraism.com/jetbrains/intellij-idea

コーディングをしてみる

ツールが揃ったら、早速コーディングを始めましょう!

今回の「シンプルな英文自動要約プログラム」は、5つの段階で作っていきます。

ステップ1テキストからの文の抽出
ステップ2ストップワードの削除
ステップ3各文を構成する全て単語の取得
ステップ4各単語への重み付け
ステップ5各文のスコアの算出
(Thresholdの値を定めて、その値を満たす文は要約文として選択します。)

Javaプロジェクトの作成

まず、「Intellij IDEA」を起動させて、新しい Javaプロジェクトを作って下さい

プロジェクトの構造は、以下のようになっています。

プロジェクトの構造

プロジェクト名は 「english_text_summarizer」 と設定していますが、あくまでも自分のわかりやすい名前を設定していただければ。

english_text_summarizer
|_input //入力ディレクトリ
 |__statue_of_liberty.txt //入力テキストファリル
|_lib //ライブラリのディレクトリ
 |__opennlp-tools-1.9.2.jar
|_src //プログラムのソースコードディレクトリ
 |__opennlp.models
  |__en-sent.bin
  |__en-token.bin
 |__en_stopwords.txt
 |__TextSummarizer.java //シンプルな英文自動要約プログラムのソースコード

ステップ1:テキストから文を抽出

ステップ1:テキストから文を抽出」をしていきます。

この段階では、文を抽出するメソッドを作って、テキストから文を抽出します。

抽出した文は、インデックスをつけて「HashMap」に格納します。

インプットとして、自由の女神に関する英文を採用します。

こちらの URL よりコピー出来ます。

【関連サイト】
https://lingua.com/english/reading/statue-of-liberty/

テキストファイルは、「statue_of_liberty.txt」と名前を付けて、「inputディレクトリ」に保存します。

文の抽出

例えば、以下のテキストから文を抽出すると…

After touring the Statue of Liberty, Claire spent the rest of the day in New York City visiting other important monuments and historic landmarks. Claire left New York hoping to have had the time to explore more sites, but she can’t wait to return to the city in the future.

次のような2つの文が得られます。

  1. After touring the Statue of Liberty, Claire spent the rest of the day in New York City visiting other important monuments and historic landmarks.
  2. Claire left New York hoping to have had the time to explore more sites, but she can’t wait to return to the city in the future.

文の抽出をするメソッドのコード

文を抽出するメソッドのコードは、下記のように書きます。

メソッドに「detectSentences」と名付けました。

ステップ2:ストップワードの削除

ステップ2:ストップワードの削除」を行います。

ストップワード(stopwords)」とは、「助詞」や「非常に一般な単語で、文章の文脈にあまり影響を及ばない単語」のことを言います。

このステップ2では、「en_stopwords.txt」のファイルに基づいて、ステップ1に得られた全ての文から、ストップワードを削除します。

削除の例を挙げます。

原文

Claire left New York hoping to have had the time to explore more sites, but she can’t wait to return to the city in the future.

ストップワードを除いた文

Claire left New York hoping to have had the time to explore more sites, but she can’t wait to return to the city in the future.

ステップ3:文のトークン化:文を構造する全ての単語を取得

ステップ3:文のトークン化:文を構造する全ての単語を取得」します。

文のトークン化は、英語で「tokenization」と言います。

ステップ3では、テキストからストップワードを除いて、全ての単語を取り出します

取得例はこちら!

テキスト

Claire left New York hoping to have had the time to explore more sites, but she can’t wait to return to the city in the future.

トークン化

Claire
left
New
York
hoping
have
had
time
explore
sites
she
wait
return
city
future

ステップ4:得られた各単語に重み付け

ステップ4:得られた各単語に重み付け」を行います。

ステップ4では、得られた単語に重みをつけて、「HashMap」に格納します

単語の重み付け

ちなみに、単語の重みの付け方は色々ありますが、ここでは単純に文章内の各単語の頻度を使っています。

これは 「word frequency」 と言います。

トークン化の例を使うと、重み付けの単語を表にまとめると、こんな感じになります。

単語頻度
Claire1
left1
New1
York1
hoping1
have1
had1
time1
explore1
sites1
she1
wait1
return1
city1
future1

コード

ステップ2、3、4のコードはこちら!

ステップ5:単語の重みを用いて、各文にスコアを与える

ステップ5:単語の重みを用いて、各文にスコアを与える」を行います。

最後の段階では、文に含まれる単語の重みを用いて、文のスコアを計算します

つまり、単語の重みの合計は、文のスコアとなります。

そして、文の「threshold」を決めて、これ以上のスコアを所有する文を抽出し、文章の要約として出力します。

文の「Threshold」は、スコアの平均値+標準偏差から算出されます。

文のスコア

上述の例を使うと、文のスコアはこのような感じになります。

単語頻度
Claire1
left1
New1
York1
hoping1
have1
had1
time1
explore1
sites1
she1
wait1
return1
city1
future1

文のスコア=15

コード

ステップ5のコードは、こちら!

mainメソッド

そして、プログラムのmainメソッドは、このように書きます。

さいごに

シンプルな方法で、英文の「自動要約プログラム」が完成しました!

ニュースや資料の長い英文を、自動で要約してくれるので、無駄に感じていた時間を減らせるかもしれません!

お困りの方は試してみてはいかがでしょうか?

Javaでのシステム開発依頼・お見積もりはこちらまでお願いします。
また、Javaエンジニアを積極採用中です!詳しくはこちらをご覧ください。

こちらの記事もオススメ!


ライトコードよりお知らせ

にゃんこ師匠にゃんこ師匠
システム開発のご相談やご依頼はこちら
ミツオカミツオカ
ライトコードの採用募集はこちら
にゃんこ師匠にゃんこ師匠
社長と一杯飲みながらお話してみたい方はこちら
ミツオカミツオカ
フリーランスエンジニア様の募集はこちら
にゃんこ師匠にゃんこ師匠
その他、お問い合わせはこちら
ミツオカミツオカ
   
お気軽にお問い合わせください!せっかくなので、別の記事もぜひ読んでいって下さいね!

一緒に働いてくれる仲間を募集しております!

ライトコードでは、仲間を募集しております!

当社のモットーは「好きなことを仕事にするエンジニア集団」「エンジニアによるエンジニアのための会社」。エンジニアであるあなたの「やってみたいこと」を全力で応援する会社です。

また、ライトコードは現在、急成長中!だからこそ、あなたにお任せしたいやりがいのあるお仕事は沢山あります。「コアメンバー」として活躍してくれる、あなたからのご応募をお待ちしております!

なお、ご応募の前に、「話しだけ聞いてみたい」「社内の雰囲気を知りたい」という方はこちらをご覧ください。

ライトコードでは一緒に働いていただける方を募集しております!

採用情報はこちら

書いた人はこんな人

ライトコードメディア編集部
ライトコードメディア編集部
「好きなことを仕事にするエンジニア集団」の(株)ライトコードのメディア編集部が書いている記事です。

関連記事