某天在磕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,一次性学会日语分词相关推荐

  1. 日语python怎么说_python – 将输出翻译成日语

    我打算将Python Bottle框架用于一个简单的网站.除了数字(例如,表中显示的数据),所有输出必须是日语.因此,我不需要输出"345.65米",而是输出"345.6 ...

  2. python深度神经网络量化_基于Python建立深度神经网络!你学会了嘛?

    原标题:基于Python建立深度神经网络!你学会了嘛? 图1 神经网络构造的例子(符号说明:上标[l]表示与第l层:上标(i)表示第i个例子:下标i表示矢量第i项) 单层神经网络 图2 单层神经网络示 ...

  3. Python学习教程(Python学习视频_Python学些路线):Day05 总结和练习

    Python学习教程(Python学习视频_Python学些路线):总结和练习 练习清单 寻找"水仙花数". 寻找"完美数". "百钱百鸡" ...

  4. python爬虫多久能学会-不踩坑的Python爬虫:如何在一个月内学会爬取大规模数据...

    原标题:不踩坑的Python爬虫:如何在一个月内学会爬取大规模数据 Python爬虫为什么受欢迎 如果你仔细观察,就不难发现,懂爬虫.学习爬虫的人越来越多,一方面,互联网可以获取的数据越来越多,另一方 ...

  5. python 处理数据小工具_用Python这个小工具,一次性把论文作图与数据处理全部搞定!...

    原标题:用Python这个小工具,一次性把论文作图与数据处理全部搞定! 一入科研深似海-- 随着大学纷纷开学,"防脱发用生姜还是黑芝麻?", 研究僧们又开始为自己所剩无几的头发发愁 ...

  6. python全套壁纸_Python 全自动壁纸更新系统

    什么是 Python Python 是一种面向对象的解释型计算机程序设计语言,由荷兰人 Guido van Rossum 于1989年发明,第一个公开发行版发行于 1991 年,是一个非常优秀的编程语 ...

  7. 视频教程-快速入门Python基础教程_Python基础知识大全-Python

    快速入门Python基础教程_Python基础知识大全 十余年计算机技术领域从业经验,在中国电信.盛大游戏等多家五百强企业任职技术开发指导顾问,国内IT技术发展奠基人之一. 杨千锋 ¥99.00 立即 ...

  8. RxJava之一——一次性学会使用RxJava

    转载请标明出处:http://blog.csdn.net/xx326664162/article/details/52068014 文章出自:薛瑄的博客 你也可以查看我的其他同类文章,也会让你有一定的 ...

  9. python相关软件_python用什么软件

    作者:find goo链接:https://www.zhihu.com/question/20491745/answer/100741761来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商 ...

最新文章

  1. 开发日记-20190914 关键词 汇编语言王爽版 第三章
  2. 要学好linux运维请从排版画图开始
  3. 使用Apache Ignite优化Spark作业性能(第1部分)
  4. @RequiresPermissionss是否可以填写多种权限标识,只要满足其一就可以访问?
  5. 为什么有的人手机通知栏显示的是4G+而有的是HD?
  6. LDAP TLS配置
  7. 一个简单的任务处理队列
  8. 一台变两台,电脑也分身
  9. Linux安装wordpress
  10. java筆試題,Java筆試題及答案
  11. Microsoft.Office.Interop.Excel # Microsoft Excel xx.0 Object Library 引用
  12. 算法分析与设计(一)——0-1背包问题
  13. 基于深度神经网络的高光谱影响分类方法研究---MNF+自动编码器+Softmax (准确率比较低,17年的论文)
  14. 微信小程序工具的使用及其参数含义。
  15. PARALYSIS AS “SPIRITUAL LIBERATION” IN JOYCE’S DUBLINERS Iven Lucas Heister, B.A.【翻译】
  16. 嵌入式100题(81):波特率是什么,为什么双方波特率要相同,高低波特率有什么区别;...
  17. 淘宝聚划算怎么做?大神导航,一个神奇的网站从此开启大神之路
  18. 碱基序列的最长公共子串(Finding a Shared Motif)
  19. 全国电子设计竞赛(高频类题目)经验总结
  20. 谈BitTorrent协议中的DHT方法

热门文章

  1. qml-创建可移动的模态弹出框
  2. java类加载过程_面试官:java类的加载过程
  3. 统计并输出某给定字符在给定字符串中出现的次数_查找常用字符
  4. java代码杨辉三角_用java实现杨辉三角的示例代码
  5. 编写程序计算 sentence 中有多少个单词,并指出其中最长和最短的单词。如果有多个最长或最短的单词,则将它们全部输出。
  6. 文件夹里面照片自动分成子文件夹_Windows居然自带这个功能,自动整理你硬盘里的照片...
  7. std::jthread与std::thread的区别
  8. iOS-raywenderlich翻译-AFNetworking速成教程
  9. invalid signature_php,微信开发JSSDK遇到的问题 config:invalid signature
  10. 在浏览器中进行深度学习:TensorFlow.js (十二)异常检测算法