enjoy了哦 发表于 2019-3-23 21:42:30

通过Python分析日语单词中音调类型的比例

本帖最后由 enjoy了哦 于 2019-3-23 23:23 编辑

通过调查日语单词中音调类型的比例,可以得出一些结论,方便记忆单词本身和其后续助词的音调。

原始数据:新明解国语辞典第5版(EPWING格式)
首先通过 EBDump 打开该EPWING格式词典的文件夹的 HONMON 文件,导出其中的“前方一致表記形見出し”部分,选择全部的1412个block。


导出后,将该文件转码成 UTF-8 格式,并使用正则表达式替换部分内容,使其容易被后续分析处理。


为统计尾高型音调,需要知道每个单词的拍数。由于拗音占有两个字符,但只算一拍,为了方便统计,将其中的小的[ゃ][ゅ][ょ] 及对应的片假名(还有小的[ア][イ][ウ][エ][オ]等,外来词专用音节)去掉,即[きゃ][きゅ][きょ]中后面那个字符。这样一来,拍数就等于字符数了。

最终的经过清洗的“干净”的数据如下所示,根据个人的习惯进行处理:


然后可以通过 Python 进行统计,一个单词可能有多个音调,但只统计第一个音调(稍微改动源码可以统计所有的音调)。这个代码可以用来明白大致的统计思路,后续还有写零碎的更改,并没有体现在这里面。
#!/usr/bin/env      python
#_*_      coding:utf-8      _*_

import sys,os
import numpy as np

# 带有音调标记的词汇数目
all_entry = 0

# 平板型,
entry_0 =

# 头高型,
entry_1 =

# 尾高型, = 拍数
entry_last_high =

# 中高型, < 拍数
entry_middle =

file_name = sys.argv
f = open(file_name,'rb')
for line in f:
      line = line.replace(b"\r\n",b"")
      line = line.decode()
      db = line.split(',')
      word_len = len(db)
      if word_len < 16:
                all_entry = all_entry + 1
                for i in range(1,len(db)):
                        accent = db
                        if accent.startswith('['):
                              integer = int(accent)
                              if integer == 0:
                                        entry_0 = entry_0 + 1
                              elif integer == 1:
                                        entry_1 = entry_1 + 1
                              elif integer == word_len:
                                        entry_last_high = entry_last_high + 1
                              else:
                                        entry_middle = entry_middle + 1
                              break

print(':')
for i in range(1,len(entry_0)):
      print('%d' % (entry_0))
print('entries: %d' % np.sum(entry_0))
print('\n')

print(':')
for i in range(1,len(entry_1)):
      print('%d' % (entry_1))
print('entries: %d' % np.sum(entry_1))
print('\n')

print('middle high:')
for i in range(1,len(entry_middle)):
      print('%d' % (entry_middle))
print('entries: %d' % np.sum(entry_middle))
print('\n')

print('last high:')
for i in range(1,len(entry_last_high)):
      print('%d' % (entry_last_high))
print('entries: %d' % np.sum(entry_last_high))
print('\n')

print('all entries:')
print(all_entry)

f.close()

最后将 Python 输出结果进行数据可视化:




以及饼图:


可以得出几个结论:
1. 尾高型的单词很少(约2%,大部分在2拍和3拍的单词上,2拍和3拍五五开,总共约1300个单词(在7万多个单词中)。
2. 头高型的单词次少(约17%),主要集中在3拍的单词上(约51%),2拍和4拍都约占20%左右。
3. 日语中4拍的单词最多(约42%),并且相当一部分(约72%)是平板型。这和新标日中入门单元里,“声调和语调”部分中“声调”小节里的解说是一样的。
4. 记忆平板型和尾高型的单词时,单词本身发音规律相同,都是前低后高,但后接的助词音调不同,不好记忆。但通过上述统计,可以这么做:(两拍以上)尾高型的单词单独记忆后续助词的音调,其后续助词的音调总是低的,而在一般情况下,一个单词(两拍以上)后接的助词的音调(高或低)和该单词的最后一拍是相同的。一拍的单词完全不符合这个“一般情况”,只需要记住这一拍本身是低还是高,再根据“一个单词中第一拍和第二拍音调必定不同”来确定助词音调。单词本身的音调则通过多听、多用以形成固定的记忆。







enjoy了哦 发表于 2019-3-24 07:52:11

kriskr 发表于 2019-3-24 00:48
想问下楼主ebdump导出后如何转码为utf8 为什么我转码后,是乱码,求赐教,是需要一些python改动吗 ...

文本编辑我一般用 notepad++,开源又好用。其中的 Encoding 菜单中有个Convert to UTF-8,可以转码。

在正则表达式替换的过程中,做了如下处理:
1. 删除了多个单词组成的条目。这种条目分别对每一个组成单词都标注了音调。
2. 声调类型统计只统计0-9,10及以上不统计。
3. 拍数在16拍及以上的不统计。
以及一些细微的调整。

因为各人处理的方法不同,你最终得出的统计结果可能和我不太一样。

kapan000 发表于 2019-3-23 22:43:16

本帖最后由 kapan000 于 2019-3-23 22:46 编辑

请教几个问题
1、新明解单词数较少,可否统计下超级大辞林?
2、统计饼图,可否给出所占比例和数量。这样更好看点。
3、可否给出统计的xls?我想再算下,10拍以内,各拍那个声调多一点及其比例

没想到0声单词这么多
我一直认为2,3,4...这类最多

enjoy了哦 发表于 2019-3-23 23:12:18

kapan000 发表于 2019-3-23 22:43
请教几个问题
1、新明解单词数较少,可否统计下超级大辞林?
2、统计饼图,可否给出所占比例和数量。这样更 ...

我觉得统计超级大辞林没有必要。原因有以下几点:
1. 新明解已经收录了常用单词,这个统计是用来指导记忆声调的,对常用7万单词的统计我觉得真的已经足够了。
2. 要对超级大辞林进行数据清洗是非常麻烦的。其中的百科词条等,也不太常用。
3. 超级大辞林中的大量片假名词语(外来词等),其声调相比常用和语、汉语词汇,没有那么固定。如果将其纳入统计,我觉得并不具有代表性。
4. 对于超级大辞林中古语的声调,我觉得统计了也没有什么代表性,我学现代日语就已经够呛了。

学日语真心推荐新明解,你可能觉得它收词量小,但是它还告诉你词汇的用法,一些有用的信息等。

这个EPWING版的新明解好像是通过别的格式转来的,里面有很多东西没转对,问题有点大,最好不要用。

kapan000 发表于 2019-3-23 23:43:22

本帖最后由 kapan000 于 2019-3-24 00:01 编辑

enjoy了哦 发表于 2019-3-23 23:12
我觉得统计超级大辞林没有必要。原因有以下几点:
1. 新明解已经收录了常用单词,这个统计是用来指导记忆 ...
非常感谢。请问下,这个统计是全部单词?是否包含了片假名单词?

如果可以的话,能否再统计以下3个纬度
这样就更细化,明白了
纯片假名
有汉字的
纯平假名的,即完全无汉字的

谢谢


kriskr 发表于 2019-3-24 00:48:53

想问下楼主ebdump导出后如何转码为utf8 为什么我转码后,是乱码,求赐教,是需要一些python改动吗

f2st 发表于 2019-3-24 10:05:05

想问下楼主ebdump导出后如何转码为utf8 为什么我转码后,是乱码,求赐教,是需要一些python改动吗

f2st 发表于 2019-3-24 10:12:58

求导出的txt{:12_406:}

takeko 发表于 2019-3-24 21:36:15

太厉害了{:4_99:}
页: [1]
查看完整版本: 通过Python分析日语单词中音调类型的比例