見出し画像

「入門 自然言語処理」 入門 (2) - 文字

「入門 自然言語処理」(2010年初版、オライリー・ジャパン)は Python2 に基づいていますが、NLTK version3.6.5 はPython3 に基づいています。そのため「入門」に書かれたコードを実行すると時々エラーになることあります。その場合は、NLTK book サイト(英文)を参照すると必要な情報が得られることが多いです。このサイトは原書の Python3 & NLTK3 対応版です。

さて、本書 p.53 の表2-3には NLTKで定義されている基本的なコーパス処理機能がまとめてあります。それらを自作のエスペラント語コーパスで実行確認していきます。

>>> # コーパスのファイル一覧
>>> tekstaro.fileids()
['LaFeino.txt', 'fundamenta-ekzercoj.txt', 'fundamenta_antauparolo.txt', 'udhr_eo.txt']

tekstaro が自作コーパスの名称。現在のファイルは4個だけですが、実用時にはもっと増やす予定です。

>>> # コーパスの生コンテンツ
>>> feino_raw = tekstaro.raw('LaFeino.txt')
>>> feino_raw
'La feino.\r\n\r\n    Unu vidvino havis du filinojn. ...(中略)... baldaŭ mortis en angulo de arbaro.\r\n'
>>> type(feino_raw)
<class 'str'>
>>> len(feino_raw)
4659

'LaFeino.txt' は1000語ほどの童話です。テキストは Wikisource のここにあります。
raw ファイルはそれ全体が1つの str 扱いになっています。改行記号や空白文字もみます。

>>> # 文字・記号の頻度分布を求める
>>> fdist_r = nltk.FreqDist(feino_raw)                       
>>> fdist_r
FreqDist({' ': 876, 'i': 507, 'a': 412, 'n': 292, 'o': 281, 'e': 273, 'l': 228, 'r': 203, 's': 193, 't': 172, ...})
>>> type(fdist_r)
<class 'nltk.probability.FreqDist'>
>>> len(fdist_r)
60

頻度分布を求める関数 FreqDist を適用すると文字・記号ごとの頻度が得られます。上記の例はテキストそのものが小さいので、エスペラントの言語としての傾向が云々とは言えませんが、コーパスデータを増やせばある程度の傾向がつかめるでしょう。
len(fdist_r) はこのファイルに文字・記号が何種類(ここでは60種類)使われているかを示します。

この記事が気に入ったらサポートをしてみませんか?