日语python怎么说_python+Mecab,一次性学会日语分词
某天在磕N1听力材料的时候,突然想到:“如果把听力里的高频词都背熟,那我的日语听力岂不是畅通无阻?”(我可真是个小机灵鬼)
实现思路就是“分词+统计”,先写一个日语词频统计小程序再说。
于是,说搞就搞。
日语分词包
调研(google)了一下,发现日语也有类似jieba这样的分词包,用的比较多的是Mecab,类似的还有ChaSen、JUMAN这些,可以看下这几个的对比。对于简单的分词统计来说,Mecab够用了。
对日语分词包感兴趣的朋友可以参考这个:日文分词器 Mecab 文档 | 我爱自然语言处理www.52nlp.cn
安装Mecab
和python其他包的安装类似,一行代码解决问题
pip install mecab-python3
小试牛刀
装完之后,在python里导入Mecab,顺便看看是否成功安装
import MeCab
如果没问题的话,那就可以进入正题了,先找一句话来练练手。天気がいいから、散歩しましょう
text = "天気がいいから、散歩しましょう"
mecab_tagger = MeCab.Tagger("-Owakati")
mecab_tagger.parse(text)
输出的结果是:
Out[1]:'天気 が いい から 、 散歩 し ましょ う \n'
可以看到,每个词中间都被一个空格隔开了,这个时候再稍加处理一下,就可以得到一个分词的list了:
In [2]:mecab_tagger.parse(text).split()[:-1]#[:-1]是为了把末尾的\n去掉
Out[2]: ['天気', 'が', 'いい', 'から', '、', '散歩', 'し', 'ましょ']
简单的分词就这样完成了!
词性区分和变形词
在实际的应用场景中,往往不是这种简单的分词就可以的,比如有时候需要针对名词进行词频统计,这就涉及到词性的区分。
在上面的代码中,我们用到了"-Owakati",这是一个只用于词语分割的模式,全称应该是「わかち書き」。比较常用的还有一个模式是"-Ochasen",举个例子感受一下:
mecab_tagger = MeCab.Tagger("-Ochasen") # `-Owakati` 只做分词
text = "ご飯を食べましたか"
print(mecab_tagger.parse(text))
输出的结果是:
ご飯 ゴハン ご飯 名詞-一般
を ヲ を 助詞-格助詞-一般
食べ タベ 食べる 動詞-自立 一段 連用形
まし マシ ます 助動詞 特殊・マス 連用形
た タ た 助動詞 特殊・タ 基本形
か カ か 助詞-副助詞/並立助詞/終助詞
EOS
##原格式是'ご飯\tゴハン\tご飯\t名詞-一般\t\t\nを\tヲ\tを\t助詞-格助詞-一般\t\t\n食べ\tタベ\t食べる\t動詞-自立\t一段\t連用形\nまし\tマシ\tます\t助動詞\t特殊・マス\t連用形\nた\tタ\tた\t助動詞\t特殊・タ\t基本形\nか\tカ\tか\t助詞-副助詞/並立助詞/終助詞\t\t\nEOS\n'
从上面的结果可以看到,输出的内容包括:分词结果、读音、原形词、词性等各类信息,基本上可以满足日常需求了。这里面我个人比较常用的是词性+原形词,尤其是原形词。毕竟大家都知道,日语里各种动词变形简直要了老命,而在做词频统计的时候直接根据原形词统计会方便很多,也可以算是数据清洗的一种方式。
可以根据自己的需要选择都需要哪些信息,以下是代码示例
mecab_tagger = MeCab.Tagger("-Ochasen") #注意选定需要的模式
#自定义分词输出的格式
def format_tag_result(x):
pieces = []
for i in x.splitlines()[:-1]: #结尾的"EOS"顺手去掉
i = i.split()
pieces.append((i[0], i[-1]))#选择需要的内容
return pieces
text = "天気がいいから、散歩しましょう"
print(format_tag_result(mecab_tagger.parse(text)))
输出的结果:
[('天気', '名詞-一般'), ('が', '助詞-格助詞-一般'), ('いい', '基本形'), ('から', '助詞-接続助詞'), ('、', '記号-読点'), ('散歩', '名詞-サ変接続'), ('し', '連用形'), ('ましょ', '未然ウ接続'), ('う', '基本形')]
好了,到这里为止,关于Mecab的基本用法就介绍完了。
一个栗子:N考真题文本分词统计
找了一份历年听力真题的txt文本,进行高频词统计。
"""
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 ['助詞','記号']:
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听力分词.csv')
输出的结果(参考):
结语
之所以写这篇文章,是因为正好把两个熟悉的东西结合到了一起——python和日语。学了很多东西之后,现在渐渐开始感受到跨学科产生的新乐趣。不过不管怎么说,更重要的是有趣的想法,工具只是帮助梦想照进现实而已。
以上。
日语python怎么说_python+Mecab,一次性学会日语分词相关推荐
- 日语python怎么说_python – 将输出翻译成日语
我打算将Python Bottle框架用于一个简单的网站.除了数字(例如,表中显示的数据),所有输出必须是日语.因此,我不需要输出"345.65米",而是输出"345.6 ...
- python深度神经网络量化_基于Python建立深度神经网络!你学会了嘛?
原标题:基于Python建立深度神经网络!你学会了嘛? 图1 神经网络构造的例子(符号说明:上标[l]表示与第l层:上标(i)表示第i个例子:下标i表示矢量第i项) 单层神经网络 图2 单层神经网络示 ...
- Python学习教程(Python学习视频_Python学些路线):Day05 总结和练习
Python学习教程(Python学习视频_Python学些路线):总结和练习 练习清单 寻找"水仙花数". 寻找"完美数". "百钱百鸡" ...
- python爬虫多久能学会-不踩坑的Python爬虫:如何在一个月内学会爬取大规模数据...
原标题:不踩坑的Python爬虫:如何在一个月内学会爬取大规模数据 Python爬虫为什么受欢迎 如果你仔细观察,就不难发现,懂爬虫.学习爬虫的人越来越多,一方面,互联网可以获取的数据越来越多,另一方 ...
- python 处理数据小工具_用Python这个小工具,一次性把论文作图与数据处理全部搞定!...
原标题:用Python这个小工具,一次性把论文作图与数据处理全部搞定! 一入科研深似海-- 随着大学纷纷开学,"防脱发用生姜还是黑芝麻?", 研究僧们又开始为自己所剩无几的头发发愁 ...
- python全套壁纸_Python 全自动壁纸更新系统
什么是 Python Python 是一种面向对象的解释型计算机程序设计语言,由荷兰人 Guido van Rossum 于1989年发明,第一个公开发行版发行于 1991 年,是一个非常优秀的编程语 ...
- 视频教程-快速入门Python基础教程_Python基础知识大全-Python
快速入门Python基础教程_Python基础知识大全 十余年计算机技术领域从业经验,在中国电信.盛大游戏等多家五百强企业任职技术开发指导顾问,国内IT技术发展奠基人之一. 杨千锋 ¥99.00 立即 ...
- RxJava之一——一次性学会使用RxJava
转载请标明出处:http://blog.csdn.net/xx326664162/article/details/52068014 文章出自:薛瑄的博客 你也可以查看我的其他同类文章,也会让你有一定的 ...
- python相关软件_python用什么软件
作者:find goo链接:https://www.zhihu.com/question/20491745/answer/100741761来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商 ...
最新文章
- 开发日记-20190914 关键词 汇编语言王爽版 第三章
- 要学好linux运维请从排版画图开始
- 使用Apache Ignite优化Spark作业性能(第1部分)
- @RequiresPermissionss是否可以填写多种权限标识,只要满足其一就可以访问?
- 为什么有的人手机通知栏显示的是4G+而有的是HD?
- LDAP TLS配置
- 一个简单的任务处理队列
- 一台变两台,电脑也分身
- Linux安装wordpress
- java筆試題,Java筆試題及答案
- Microsoft.Office.Interop.Excel # Microsoft Excel xx.0 Object Library 引用
- 算法分析与设计(一)——0-1背包问题
- 基于深度神经网络的高光谱影响分类方法研究---MNF+自动编码器+Softmax (准确率比较低,17年的论文)
- 微信小程序工具的使用及其参数含义。
- PARALYSIS AS “SPIRITUAL LIBERATION” IN JOYCE’S DUBLINERS Iven Lucas Heister, B.A.【翻译】
- 嵌入式100题(81):波特率是什么,为什么双方波特率要相同,高低波特率有什么区别;...
- 淘宝聚划算怎么做?大神导航,一个神奇的网站从此开启大神之路
- 碱基序列的最长公共子串(Finding a Shared Motif)
- 全国电子设计竞赛(高频类题目)经验总结
- 谈BitTorrent协议中的DHT方法
热门文章
- qml-创建可移动的模态弹出框
- java类加载过程_面试官:java类的加载过程
- 统计并输出某给定字符在给定字符串中出现的次数_查找常用字符
- java代码杨辉三角_用java实现杨辉三角的示例代码
- 编写程序计算 sentence 中有多少个单词,并指出其中最长和最短的单词。如果有多个最长或最短的单词,则将它们全部输出。
- 文件夹里面照片自动分成子文件夹_Windows居然自带这个功能,自动整理你硬盘里的照片...
- std::jthread与std::thread的区别
- iOS-raywenderlich翻译-AFNetworking速成教程
- invalid signature_php,微信开发JSSDK遇到的问题 config:invalid signature
- 在浏览器中进行深度学习:TensorFlow.js (十二)异常检测算法