日语python怎么说_python+Mecab,一次性学会日语分词
某天在磕N1聽(tīng)力材料的時(shí)候,突然想到:“如果把聽(tīng)力里的高頻詞都背熟,那我的日語(yǔ)聽(tīng)力豈不是暢通無(wú)阻?”(我可真是個(gè)小機(jī)靈鬼)
實(shí)現(xiàn)思路就是“分詞+統(tǒng)計(jì)”,先寫(xiě)一個(gè)日語(yǔ)詞頻統(tǒng)計(jì)小程序再說(shuō)。
于是,說(shuō)搞就搞。
日語(yǔ)分詞包
調(diào)研(google)了一下,發(fā)現(xiàn)日語(yǔ)也有類(lèi)似jieba這樣的分詞包,用的比較多的是Mecab,類(lèi)似的還有ChaSen、JUMAN這些,可以看下這幾個(gè)的對(duì)比。對(duì)于簡(jiǎn)單的分詞統(tǒng)計(jì)來(lái)說(shuō),Mecab夠用了。
對(duì)日語(yǔ)分詞包感興趣的朋友可以參考這個(gè):日文分詞器 Mecab 文檔 | 我愛(ài)自然語(yǔ)言處理?www.52nlp.cn
安裝Mecab
和python其他包的安裝類(lèi)似,一行代碼解決問(wèn)題
pip install mecab-python3
小試牛刀
裝完之后,在python里導(dǎo)入Mecab,順便看看是否成功安裝
import MeCab
如果沒(méi)問(wèn)題的話,那就可以進(jìn)入正題了,先找一句話來(lái)練練手。天気がいいから、散歩しましょう
text = "天気がいいから、散歩しましょう"
mecab_tagger = MeCab.Tagger("-Owakati")
mecab_tagger.parse(text)
輸出的結(jié)果是:
Out[1]:'天気 が いい から 、 散歩 し ましょ う \n'
可以看到,每個(gè)詞中間都被一個(gè)空格隔開(kāi)了,這個(gè)時(shí)候再稍加處理一下,就可以得到一個(gè)分詞的list了:
In [2]:mecab_tagger.parse(text).split()[:-1]#[:-1]是為了把末尾的\n去掉
Out[2]: ['天気', 'が', 'いい', 'から', '、', '散歩', 'し', 'ましょ']
簡(jiǎn)單的分詞就這樣完成了!
詞性區(qū)分和變形詞
在實(shí)際的應(yīng)用場(chǎng)景中,往往不是這種簡(jiǎn)單的分詞就可以的,比如有時(shí)候需要針對(duì)名詞進(jìn)行詞頻統(tǒng)計(jì),這就涉及到詞性的區(qū)分。
在上面的代碼中,我們用到了"-Owakati",這是一個(gè)只用于詞語(yǔ)分割的模式,全稱(chēng)應(yīng)該是「わかち?xí)埂1容^常用的還有一個(gè)模式是"-Ochasen",舉個(gè)例子感受一下:
mecab_tagger = MeCab.Tagger("-Ochasen") # `-Owakati` 只做分詞
text = "ご飯を食べましたか"
print(mecab_tagger.parse(text))
輸出的結(jié)果是:
ご飯 ゴハン ご飯 名詞-一般
を ヲ を 助詞-格助詞-一般
食べ タベ 食べる 動(dòng)詞-自立 一段 連用形
まし マシ ます 助動(dòng)詞 特殊?マス 連用形
た タ た 助動(dòng)詞 特殊?タ 基本形
か カ か 助詞-副助詞/並立助詞/終助詞
EOS
##原格式是'ご飯\tゴハン\tご飯\t名詞-一般\t\t\nを\tヲ\tを\t助詞-格助詞-一般\t\t\n食べ\tタベ\t食べる\t動(dòng)詞-自立\t一段\t連用形\nまし\tマシ\tます\t助動(dòng)詞\t特殊?マス\t連用形\nた\tタ\tた\t助動(dòng)詞\t特殊?タ\t基本形\nか\tカ\tか\t助詞-副助詞/並立助詞/終助詞\t\t\nEOS\n'
從上面的結(jié)果可以看到,輸出的內(nèi)容包括:分詞結(jié)果、讀音、原形詞、詞性等各類(lèi)信息,基本上可以滿足日常需求了。這里面我個(gè)人比較常用的是詞性+原形詞,尤其是原形詞。畢竟大家都知道,日語(yǔ)里各種動(dòng)詞變形簡(jiǎn)直要了老命,而在做詞頻統(tǒng)計(jì)的時(shí)候直接根據(jù)原形詞統(tǒng)計(jì)會(huì)方便很多,也可以算是數(shù)據(jù)清洗的一種方式。
可以根據(jù)自己的需要選擇都需要哪些信息,以下是代碼示例
mecab_tagger = MeCab.Tagger("-Ochasen") #注意選定需要的模式
#自定義分詞輸出的格式
def format_tag_result(x):
pieces = []
for i in x.splitlines()[:-1]: #結(jié)尾的"EOS"順手去掉
i = i.split()
pieces.append((i[0], i[-1]))#選擇需要的內(nèi)容
return pieces
text = "天気がいいから、散歩しましょう"
print(format_tag_result(mecab_tagger.parse(text)))
輸出的結(jié)果:
[('天気', '名詞-一般'), ('が', '助詞-格助詞-一般'), ('いい', '基本形'), ('から', '助詞-接続助詞'), ('、', '記號(hào)-読點(diǎn)'), ('散歩', '名詞-サ変接続'), ('し', '連用形'), ('ましょ', '未然ウ接続'), ('う', '基本形')]
好了,到這里為止,關(guān)于Mecab的基本用法就介紹完了。
一個(gè)栗子:N考真題文本分詞統(tǒng)計(jì)
找了一份歷年聽(tīng)力真題的txt文本,進(jìn)行高頻詞統(tǒng)計(jì)。
"""
Created on Sun Apr 12 11:44:30 2020
@author: chenlufan
"""
import MeCab
import pandas as pd
file_in = open('test.txt')
f_line = file_in.read()
mecab_tagger = MeCab.Tagger("-Ochasen")
result=mecab_tagger.parse(f_line)
my_list = []
for i in result.splitlines()[:-1]:
i = i.split()
try:
v = (i[2], i[1], i[-1])
except:
pass
my_list.append(v)
word_dict = {}
word_sub = {}
word_pro={}
for i in my_list:
if i[-1].split('-')[0] not in ['助詞','記號(hào)']:
if i[0] not in word_dict:
word_dict[i[0]]=1
word_sub[i[0]]=i[-1]
word_pro[i[0]]=i[1]
else:
word_dict[i[0]] =word_dict[i[0]]+1
df =pd.DataFrame({"fre":word_dict,'pro':word_pro,'sub':word_sub})
df=df[df.fre>1]
df=df.sort_values(by=['fre'],ascending=False)
df.to_csv('N1聽(tīng)力分詞.csv')
輸出的結(jié)果(參考):
結(jié)語(yǔ)
之所以寫(xiě)這篇文章,是因?yàn)檎冒褍蓚€(gè)熟悉的東西結(jié)合到了一起——python和日語(yǔ)。學(xué)了很多東西之后,現(xiàn)在漸漸開(kāi)始感受到跨學(xué)科產(chǎn)生的新樂(lè)趣。不過(guò)不管怎么說(shuō),更重要的是有趣的想法,工具只是幫助夢(mèng)想照進(jìn)現(xiàn)實(shí)而已。
以上。
總結(jié)
以上是生活随笔為你收集整理的日语python怎么说_python+Mecab,一次性学会日语分词的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 羊都被薅秃了 阿根廷区游戏85%都是他国
- 下一篇: python文件行数统计_文件行数和代码