2017.12.21 Thu |
テキスト解析入門その1(英語文書要約)
今回は、テキスト解析の入門をやっていきたいと思います。
テキスト解析と言っても、様々なものがありますが、今回は、R言語を用いた、英語文書の要約をやってみます。
要約には、新しく文書を生成するものと、文書を抜き出してくるものがありますが、今回は、文書を抜き出してくるものをやってみます。
使用するパッケージは、LSAfunパッケージというものです。
https://cran.r-project.org/web/packages/LSAfun/index.html
そして、要約する文書は、オバマ大統領の最後のスピーチです。
https://obamawhitehouse.archives.gov/the-press-office/2017/01/18/remarks-president-final-press-conference
まずは、パッケージのロードから始めます。
install.packages(“LSAfun”,dependencies=T)
library(LSAfun)
次にデータの読みこみを行います。
先ほどの、websiteから、テキストをコピーして、テキストファイルに保存します。
もしwindowsの環境であれば、文字コードは、shift-jis(ANSI)、macやlinux環境であれば、文字コードは、utf-8で保存します。
ではデータを読み込んでいきましょう。
Obama = scan(“Obama.txt”, what = “char”, sep = “\n”)
これを実行すると以下のような結果が出てきます。
240行読みこんだということですね。
ちなみに、読み込みに関して説明しますと、文書を読み込む際は、scan関数を使います。また、文字を読みこむ指定は、what引数で、charまたは、characterを指定します。区切りはsep引数で指定し、デフォルトだと単語区切りになるところを今回は、改行(\n)で区切りました。
では、ちゃんと読みこめているかを確認してみましょう。
#頭出し6行の確認
head(Obama)
3行目と5行目に空白がありますが、今回の結果には影響しないのでそのままにしておきます。
それでは、要約にはいりましょう。
この文書を最も的確に表す一行を抽出します。
genericSummary(Obama,k=1)
それなりに長いので、ここに取り出された一行を張り付けます。
My view was, after 50 years of a policy not working, it made sense for us to try to reopen diplomatic relations, to engage a Cuban government, to be honest with them about the strong disagreements we have around political repression and treatment of dissenters and freedom of press and freedom of religion, but that to make progress for the Cuban people, our best shot was to suddenly have the Cuban people interacting with Americans, and seeing the incredible success of the Cuban American community, and engaging in commerce and business and trade, and that it was through that process of opening up these bilateral relations that you would see over time serious and significant improvement
参考までにGoogle翻訳(とそれを一部修正したもの)を張り付けます。キューバに関する外交政策について話しているみたいですね。
“私の見解は、50年の政策が機能しなくなった後、外交関係を再開しようとすること、キューバ政府と関わること、正反対の政治的抑圧と反対派の扱いについての正直な意見、 キューバの人々のために進歩を遂げるためには、キューバの人々がアメリカ人とやりとりし、キューバのアメリカ社会の驚異的な成功を見て、商取引やビジネスに携わること、そして これらの二国間関係を開放するプロセスを通じて、時間の経過と共に重大かつ有意義な改善が見られるであろうことを強調しました。”
genericSummary関数の引数にいくつ重要な行を取ってくるかを指定するkがあり、たとえば、k=2と指定すると、文書中重要度が高い二行を取り出すことができます。
genericSummary(Obama,k=2)
一つ目は先ほどと同じですが、二つ目は、新しいものです。
二つ目の文を、こちらに張り付けます。
THE PRESIDENT: Well, let me be absolutely clear. I did not mean that I was going to be running for anything anytime soon. (Laughter.) What I meant is that it’s important for me to take some time to process this amazing experience that we’ve gone through; to make sure that my wife, with whom I will be celebrating a 25th anniversary this year, is willing to re-up and put up with me for a little bit longer. I want to do some writing. I want to be quiet a little bit and not hear myself talk so darn much. I want to spend precious time with my girls.
この英文も和訳しましょう。オバマ大統領の今後についての内容ですね。これは確かにこのインタビューの一番重要な部分と言えそうです。
“大統領:はっきり言いましょう。 私はすぐに何かのために走っているつもりはなかった。 (笑い)私が言いたいことは、私たちが経験したこの素晴らしい経験を消化するのに時間を取ることが重要であるということです。 今年私が25周年を迎える妻と一緒に、もう少し長く私と一緒にお付き合いしてくれることを願っています。 私はいくつかの執筆をしたい。 私は少し発言を控えたい。私は自分の話を聞くのはこりごりです。 私は私の娘と貴重な時間を過ごしたいです。”
ということで今回の文書要約紹介を終わりにします。
鈴木瑞人
東京大学大学院新領域創成科学研究科 メディカル情報生命専攻 博士課程