1.はじめに
環境 windows10 python3.88
vscodeを使用しました
python,Qiitaともに初めてです。あしからず。
2.目的
英単語勉強時にQuizletに単語を登録して学んでいたが、
当時は適当~に単語を突っ込んでいただけだったので、
学習が進み品詞事に学んだほうが効率がいいと知った時には手遅れで、手作業でできる量ではなかったため、pythonを使い自動でやることにした。
3.プログラム
必要なライブラリ等をインポートします。
今回は、nltk(Natural Language Toolkit)という今回の目的にピッタリなものがあったので採用しました。
reは標準ライブラリ,sslは品詞情報などをダウンロードする必要があるので、使用します。
import nltk
import ssl
import re
自分の環境では、nltk.download()を実行した際にsslerrorが表示されたので、海外のサイトを参考に以下のコードを記述しました。
なお、2回目以降の実行の際には、nltk.download()はコメントアウトしてもらってOKです。
try:
_create_unverified_https_context = ssl._create_unverified_context
except AttributeError:
pass
else:
ssl._create_default_https_context = _create_unverified_https_context
print(nltk.__version__)
nltk.download()
#nltk.download()2回目以降
単語を保存する際にリストを採用することにしました。
list_dataに一度すべての英単語を格納します。
また、品詞毎にリストを用意します。以下では自分の必要な品詞のみ列挙しましたが、必要に応じて追加などしてください。
そして、私のプログラムの知識上、都合のいいように各品詞リストには、"NN"のように初期化するようにしました。これによって、出力ファイルには1行目にNNやRBが記述されます。
list_listには品詞毎のリストをリストとして表現できるようにしました。
list_data = []
list_NN=["NN"]
list_RB=["RB"]
list_JJ=["JJ"]
list_VB=["VB"]
list_DT=["DT"]
list_IN=["IN"]
list_VBN=["VBN"]
list_VBP=["VBP"]
list_VBG=["VBG"]
list_list=[list_NN,list_RB,list_JJ,list_VB,list_VBP,list_VBG]
以下は品詞を振り分けてそれぞれのリストに格納する関数です。
wordsを引数として受け取ります。
wordsは,以下のようになってます。
milk,NN
単語、品詞
def distinct_words_tag(words):
if words[0][1]=="NN":
list_NN.append(words[0][0])
elif words[0][1]=="RB":
list_RB.append(words[0][0])
elif words[0][1]=="JJ":
list_JJ.append(words[0][0])
elif words[0][1]=="VB":
list_VB.append(words[0][0])
elif words[0][1]=="DT":
list_DT.append(words[0][0])
elif words[0][1]=="IN":
list_IN.append(words[0][0])
elif words[0][1]=="VBN":
list_VBN.append(words[0][0])
elif words[0][1]=="VBP":
list_VBP.append(words[0][0])
elif words[0][1]=="VBG":
list_VBG.append(words[0][0])
以下は、リストをtxtに出力する関数です。
今回は、デスクトップ上にengpyというフォルダを作成し、その中に保存するようにしました。
2重ループです。
引数としてlist_listを受け取ります。
一つ目のループで品詞別リストを回します。
with openでファイルを作成します。ここで、ファイル名を一番最初に初期化した文字列で作成することができます。NNだとNN.txtのようになります。(ほかの書き方があったら教えてください)
2つ目のループで対称ファイルにリストの中身を書き込んでいます。
dにはリストのオブジェクト?が参照されているはずです。
def file_write(list_list):
for d in list_list:
with open('C:\\Users\\user\\Desktop\\engpy\\'+d[0]+'.txt', 'w') as f:
for n in d:
f.write("%s\n"%n)
f.close
以下はほかの言語でいうメイン文です。
Quizletでエクスポートする際にカンマを選択してください
そして、それをquizlet.txtに貼り付けます。
パスは注意してください
f = open('C:\\Users\\user\\Desktop\\engpy\\quizlet.txt', 'r')
for row in f:
split_row = row.rstrip('\n').split(',')
tango = split_row[0]
list_data.append(tango)
f.close()
nltk.download('averaged_perceptron_tagger')
for i in list_data:
morph = nltk.word_tokenize(i)
pos = nltk.pos_tag(morph)
distinct_words_tag(pos)
file_write(list_list)
品詞リスト
1 | 2 |
---|---|
NN | 名詞 |
RB | 副詞 |
JJ | 形容詞 |
VB | 動詞(原型) |
DT | 限定詞 |
IN | 前置詞 |
VBN | 過去分詞 |
VBP | 動詞(現在形) |
VBG | 動名詞 |