背景
「Pythonでテキストを要約してみたい。」
とういうことで、この記事を参考にPythonのライブラリのsumy
を使用してみました。
この記事では、macの中にDockerを入れることからします。
python3.6以降+pipの環境がある場合は、ライブラリのインストールまでスキップできます。
環境
- MacBook Air (M1)
- macOS Monterey 12.3
- Homebrew 3.4.6
Docker Desktopの起動
brew install --cask docker
open /Applications/Docker.app
--cask
を付けると、Docker Desktopがインストールされます。
私の環境では、以下のエラーが出ました。
It seems there is already a Binary at '/usr/local/share/zsh/site-functions/_docker'.
原因は、先にDocker CLIがインストールされていたためでした。
以下を参考に修正しました。
参考記事:Dockerのインストールでエラーが出た時の対処
CentOSの起動
docker pull centos
docker run -it centos
OSのバージョンの確認(RedHat系)
cat /etc/redhat-release
# CentOS Linux release 8.4.2105
Pythonの設定
CentOS8
には、Python3.6
がデフォルトで存在します。
Python3.6以降が存在しない場合は、インストールしてください。
※参考記事内ではPython3.4以前も使えると書いてありますが、GitHubでは3.6以降になっています。
Pythonのパスを通す
ln -s /usr/libexec/platform-python /usr/local/bin/python
pipの設定
デフォルトではpipが存在しないため、pipをインストールします。
pip 22からPython 3.6のサポートは切れたため、pip 21をインストールします。
curl https://bootstrap.pypa.io/pip/3.6/get-pip.py | python
ライブラリのインストール
sumyの実行に必要なライブラリをインストールします。
pip install -U setuptools
pip install sumy numpy tinysegmenter
コード (参考記事を引用)
test.py
from __future__ import absolute_import
from __future__ import division, print_function, unicode_literals
from sumy.parsers.html import HtmlParser
from sumy.nlp.tokenizers import Tokenizer
from sumy.summarizers.lex_rank import LexRankSummarizer as Summarizer
from sumy.nlp.stemmers import Stemmer
from sumy.utils import get_stop_words
LANGUAGE = "japanese"
SENTENCES_COUNT = 3
if __name__ == "__main__":
url = "https://ja.wikipedia.org/wiki/%E3%82%A4%E3%83%8C"
parser = HtmlParser.from_url(url, Tokenizer(LANGUAGE))
stemmer = Stemmer(LANGUAGE)
summarizer = Summarizer(stemmer)
summarizer.stop_words = get_stop_words(LANGUAGE)
for sentence in summarizer(parser.document, SENTENCES_COUNT):
print(sentence)
実行結果
警察犬 の遺留品捜査や 災害救助犬 の被災者探索などでよく知られるように、イヌの感覚のうち最も発達しているのは 嗅覚 であり、においで食べられるものかどうか、目の前にいる動物は敵か味方かなどを判断する。
縄文時代 早期からの遺跡から犬( 縄文犬 )が出土しており、その一部は 埋葬 された状態で発見されているが、多数例は散乱状態で出ており、家族の一員として飼われた犬と、そうでない犬がいたと考えられる。
(イヌの肉は数千年前から食用とされてきた。
まとめ
精度は微妙だが、とりあえず要約することができた。