見出し画像

英単語の抽出コマンド

(Python学習初心者の試行錯誤・備忘録です)
 英語のテキストファイルがあります。そこから単語を全抽出して出現頻度情報をつけてリスト化したい。・・・なんてことを考えています。

 とはいえ、まあ、そんなことは、きっとどこかのどなたかが既にやっていらっしゃるはず・・・。と、検索したら、早速、見つかりました。

mkunu様のQiitaの記事です。
特に関心があったのは 「3.txt内の各単語の登場回数を調べる。」の部分

import re  #正規表現 
from collections import Counter #数え上げ

# 各単語の登場回数を調べる。
words = re.split(r'\s|\,|\.|\(|\)', target_text.lower())
counter = Counter(words)

やっていらっしゃることは、テキスト丸ごとtarget_textに入れ,
lower() で小文字に統一してから、 re.split()で、スペース、カンマ、ピリオド、カッコで切り分けたものを、単語の羅列リストwords へ格納する。あとはCounter で出現回数つけて頻出順にならべる、と言う流れですね。
 あと問題は、作者のmkunu様も書いていらっしゃる「数字や記号、意味をなさない文字列を省くのが難しい。」と言う点。"Covid-19"のような専門用語(?)が出てくる英語論文の場合は、たしかに難しいと思います。
 ただ、私の場合は小中学生レベルの英語教材の単語帳を作る目的なので、「アルファベット26文字から成るものだけ抽出」(アポストロフィが入る語もおそらくはTaro’s Hanako’s とかだろうし無視)と割り切ってしまうことにしました。これで、意味を成す文字列だけが残るはず。また、a とかis とかtoとかなら、わざわざ残さなくてもいいでしょう。暗記が必要な単語は、少なくとも三文字以上のものだろうな、ということでその制約も付けました。

words = re.split(r'\s|\,|\.|\(|\)', target_text.lower())
pattern = re.compile(r'\b[a-z]{3,}\b')
filterd_list= [word for word in words if pattern.fullmatch(word)]

これで抽出した単語リストをCounterにかける。昨日やったコマンドラインのコマンドにする

ということで、全体のコードは

import sys
import csv
import re
from collections import Counter

org_file = 'org_file'
result_file = 'result_file'
target_text = 'target_text'

n=len(sys.argv)  #引数の個数確認
if n==3:
    #元ファイル、出力ファイルのファイル名を取得
    org_file = sys.argv[1]
    result_file = sys.argv[2]

    #元ファイル読み込み,target_textに格納
    with open(org_file, 'r', encoding='UTF-8') as f:
        target_text = f.read()
    
    #正規表現で単語に切り分け
    words = re.split(r'\s|\,|\.|\(|\)', target_text.lower())
    
    #条件に合わない単語を削除して、条件に合う単語だけfilterd_listに
    pattern = re.compile(r'\b[a-z]{3,}\b')
    filterd_list= [word for word in words if pattern.fullmatch(word)]
    
    #出現回数の集計と、並び替え
    counter = Counter(filterd_list)
    
    #単語と出現回数のCSVにしてresult_fileに出力
    with open(result_file,'w',newline='',encoding ='utf-8') as csvresult:
        csvwriter = csv.writer(csvresult)
        for word, count in counter.most_common():
            temprow = word, count
            csvwriter.writerow(temprow)
else:
    print("ファイルの指定が違っています")

これをmyword.py として保存。
自分の環境で使う分には
>python myword.py (元ファイル名) (出力ファイル名)
とやればcsvで、単語と出現回数の組が得られます。
とある英文テキストの処理結果

the,104
his,36
that,34
have,30
and,29
she,25
for,25
they,25
not,23
people,22
:
:
checked,1
baggage,1
late,1
mainly,1
active,1

小学生クンに渡すときはEXE化しておきます。
>pyinstaller myword.py --onefile
dist フォルダの中にmyword.exe ができています。
 一部は昨日の繰り返しになりますが、コマンドプロンプトからであれば
>myword (元ファイル名) (出力ファイル名)
「PowerShell」からであれば、
>.\myword (元ファイル名) (出力ファイル名)
で動作しました。

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