1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Quizletでエクスポートした英単語を品詞別に分ける

Last updated at Posted at 2022-11-15

1.はじめに

環境 windows10 python3.88
vscodeを使用しました
python,Qiitaともに初めてです。あしからず。

参考

2.目的

英単語勉強時にQuizletに単語を登録して学んでいたが、
当時は適当~に単語を突っ込んでいただけだったので、
学習が進み品詞事に学んだほうが効率がいいと知った時には手遅れで、手作業でできる量ではなかったため、pythonを使い自動でやることにした。

3.プログラム

必要なライブラリ等をインポートします。
今回は、nltk(Natural Language Toolkit)という今回の目的にピッタリなものがあったので採用しました。
reは標準ライブラリ,sslは品詞情報などをダウンロードする必要があるので、使用します。

eng.py
import nltk
import ssl
import re

自分の環境では、nltk.download()を実行した際にsslerrorが表示されたので、海外のサイトを参考に以下のコードを記述しました。
なお、2回目以降の実行の際には、nltk.download()はコメントアウトしてもらってOKです。

eng.py
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には品詞毎のリストをリストとして表現できるようにしました。

eng.py
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は,以下のようになってます。

words
    milk,NN
    単語、品詞
eng.py
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にはリストのオブジェクト?が参照されているはずです。

eng.py
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に貼り付けます。
パスは注意してください

eng.py
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 動名詞
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?