![見出し画像](https://assets.st-note.com/production/uploads/images/138538778/rectangle_large_type_2_50a8cb945381f721967cc1a51ececf6d.jpeg?width=1200)
英単語の抽出コマンド
(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 (元ファイル名) (出力ファイル名)
で動作しました。
この記事が気に入ったらサポートをしてみませんか?