見出し画像

「入門 自然言語処理」 入門

しばらく積ん読状態だった「入門 自然言語処理」(オライリー・ジャパン)をこの数日かけてようやく第2章第1節まで読み進めることができた。目標はNLTK (Natural Language Toolkit / Ilaro por naturlingva prilaborado) をエスペラント語の分析に利用することだ。まだまだ先は長いが、これまでにできたことを覚え書きとしてまとめておく。

まず、実行環境の整備:
・Windows10 64bit
・VSCode 1.61
・Git for Windows 2.33.0
・Python 3.9.7 32-bit
・NLTK 3.6.5
VSCode のターミナルとして Git Bash を入れ、32ビットPythonの仮想環境を作り、NLTK をインストールした。これに際してインターネット上に置かれた各種情報がたいへん参考になった。各筆者の方々には感謝感謝である。

次に、エスペラント語のコーパスをローカル環境に構築する。VSCode で作った仮想環境のディレクトリに /tekstoj/ サブディレクトリを作り、そこに試験的に 4個のプレーンテキストファイルを utf8 (BOM無し) で保存した。これは (BOM付き) でも構わないようだ。

VSCode のターミナルを開き、Python の対話モードに入り、以下のコードを実行する。(「入門」p.470, p.54, p.43 参照)

import nltk
from nltk.corpus.reader import *
from nltk.corpus.reader.util import *
from nltk.text import Text
tekstaro = PlaintextCorpusReader("./tekstoj/", r'.*\.txt')
print(tekstaro.fileids())
for fileid in tekstaro.fileids():
   num_chars = len(tekstaro.raw(fileid))
   num_words = len(tekstaro.words(fileid))
   num_sents = len(tekstaro.sents(fileid))
   num_vocab = len(set([w.lower() for w in tekstaro.words(fileid)]))
   print(int(num_chars/num_words), int(num_words/num_sents), 
   int(num_words/num_vocab), fileid)

NLTK にすでに収録されている各種コーパス以外に、独自のコーパスを構築したいときは、PlaintextCorpusReader関数を使用する。
・PlaintextCorpusReader(corpus_root, file_pattern)
   corpus_root:テキストファイルを置いたディレクトリのパス
   file_pattern: ファイルにマッチするパターン

現在の環境では、結果は次のように表示される。

4 28 3 LaFeino.txt
4 12 3 fundamento-ekzercoj.txt
5 44 3 fundamento-antauparolo.txt
5 29 2 udhr_eo.txt

各行の 1番目の数値は単語の平均長(空白文字もカウント)、2番目は文の平均長、3番目は語彙多様性スコア(各単語がテキスト中に現れた回数の平均)である。(「入門」p.43 参照)

以上でエスペラント語のコーパスを NLTK で取り扱う準備が整った。これから頻度分布などいろいろ試してみようと考えている。

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