開発環境
- Python 3.6.5
- Atom
- Windows7
動いていたコード (コードAとする)
このコードの詳細な挙動は以前の質問をご覧ください。
このコードは、ロシア語の文章に出てくる単語を出る順にソートし、出現回数と合わせてcsvに出力します。
python
1# -*- coding: utf-8 -*- 2# コードB 3from nltk import FreqDist 4import pymorphy2 5import csv 6import re 7 8downloadtxt = open('26and1.txt', 'r', encoding = 'utf-8-sig') 9texts = downloadtxt.read() 10texts = re.sub('[.,?!()\'—]', ' ', texts) 11texts = texts.split() 12 13analyzer = pymorphy2.MorphAnalyzer() 14 15lemma_list = [] 16for text in texts: 17 lemma = analyzer.parse(text)[0].normal_form 18 lemma_list.append(lemma) 19freqdist = FreqDist(lemma_list) 20freqdist_list = freqdist.most_common(900) 21print(freqdist_list[0]) 22with open('26and1.csv', 'w', encoding = 'utf-8-sig') as file: 23 writer = csv.writer(file, lineterminator = '\n') 24 for n in range(0, len(freqdist_list)): 25 writer.writerows([freqdist_list[n]])
動かなくなったコード (コードBとする)
コードBの挙動
lemma_list = lemma_list.remove('и')
が認識されていない?- 出力したcsvファイルの中身が空っぽ。
python
1# -*- coding: utf-8 -*- 2# コードB 3from nltk import FreqDist 4import pymorphy2 5import csv 6import re 7 8downloadtxt = open('26and1.txt', 'r', encoding = 'utf-8-sig') 9texts = downloadtxt.read() 10texts = re.sub('[.,?!()\'—]', ' ', texts) 11texts = texts.split() 12 13analyzer = pymorphy2.MorphAnalyzer() 14 15lemma_list = [] 16for text in texts: 17 lemma = analyzer.parse(text)[0].normal_form 18 lemma_list.append(lemma) 19 20lemma_list = lemma_list.remove('и') # ←これを追記 21freqdist = FreqDist(lemma_list) 22freqdist_list = freqdist.most_common(900) 23# print(freqdist_list[0]) ←これを削除 24with open('26and1.csv', 'w', encoding = 'utf-8-sig') as file: 25 writer = csv.writer(file, lineterminator = '\n') 26 for n in range(0, len(freqdist_list)): 27 writer.writerows([freqdist_list[n]])
コードBで何がしたいか
- иやмыのような高頻度で出てくるが、意味をなさない単語 (前置詞や人称代名詞) を
lemma_list
から削除してからcsvファイルを出力したい。
コードAでは、単語の出現回数順にソートした結果をcsvファイルに出力してくれますが、頻出単語として大勢を占めているのが人称代名詞や前置詞などであり、「知らない単語を頻出順に覚えたい」という希望にそぐいません。
そこでコードBのように、lemma_list
からそのような不要な単語を削除してから頻出順にソートしてcsvファイルに出力したいのです。
よろしくお願いします<(_ _)>
できましたー!
python
1# ... 2lemma_list = [] 3for text in texts: 4 lemma = analyzer.parse(text)[0].normal_form 5 lemma_list.append(lemma) 6 7lemma_list = list(filter(lambda d: d not in ('и', 'мы', 'она', 'в', 'не', 8 'он', 'на', 'быть', 'что', 9 'весь', 'с', 'наш', 'это' 10 'как', 'они', 'к', 'а', 11 'о', 'из', 'но', 'у', 12 'за', 'же', 'от', 'я', 13 'свой', 'ты', 'то', 'по', 14 'до', 'бы', 'вы', 'уже', 15 'над', 'без', 'под', 'вот'), lemma_list)) 16# ... 17
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/09/23 07:05