查看: 1450|回复: 8
打印 上一主题 下一主题

[语言讨论] 通过Python分析日语单词中音调类型的比例

[复制链接]
  • TA的每日心情
    开心
    2023-3-10 21:15
  • 签到天数: 1329 天

    [LV.10]以坛为家III

    4

    主题

    1342

    回帖

    2万

    积分

    状元

    Rank: 9Rank: 9Rank: 9

    积分
    22253
    跳转到指定楼层
    1
    发表于 2019-3-23 21:42:30 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 enjoy了哦 于 2019-3-23 23:23 编辑

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

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


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


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

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


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

    3. import sys,os
    4. import numpy as np

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

    7. # 平板型,[0]
    8. entry_0 = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

    9. # 头高型,[1]
    10. entry_1 = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

    11. # 尾高型,[x] = 拍数
    12. entry_last_high = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

    13. # 中高型,[x] < 拍数
    14. entry_middle = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

    15. file_name = sys.argv[1]
    16. f = open(file_name,'rb')
    17. for line in f:
    18.         line = line.replace(b"\r\n",b"")
    19.         line = line.decode()
    20.         db = line.split(',')
    21.         word_len = len(db[0])
    22.         if word_len < 16:
    23.                 all_entry = all_entry + 1
    24.                 for i in range(1,len(db)):
    25.                         accent = db[i]
    26.                         if accent.startswith('['):
    27.                                 integer = int(accent[1])
    28.                                 if integer == 0:
    29.                                         entry_0[word_len] = entry_0[word_len] + 1
    30.                                 elif integer == 1:
    31.                                         entry_1[word_len] = entry_1[word_len] + 1
    32.                                 elif integer == word_len:
    33.                                         entry_last_high[word_len] = entry_last_high[word_len] + 1
    34.                                 else:
    35.                                         entry_middle[word_len] = entry_middle[word_len] + 1
    36.                                 break

    37. print('[0]:')
    38. for i in range(1,len(entry_0)):
    39.         print('%d' % (entry_0[i]))
    40. print('entries: %d' % np.sum(entry_0))
    41. print('\n')

    42. print('[1]:')
    43. for i in range(1,len(entry_1)):
    44.         print('%d' % (entry_1[i]))
    45. print('entries: %d' % np.sum(entry_1))
    46. print('\n')

    47. print('middle high:')
    48. for i in range(1,len(entry_middle)):
    49.         print('%d' % (entry_middle[i]))
    50. print('entries: %d' % np.sum(entry_middle))
    51. print('\n')

    52. print('last high:')
    53. for i in range(1,len(entry_last_high)):
    54.         print('%d' % (entry_last_high[i]))
    55. print('entries: %d' % np.sum(entry_last_high))
    56. print('\n')

    57. print('all entries:')
    58. print(all_entry)

    59. f.close()
    复制代码


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




    以及饼图:


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







    Untitled.png (18.5 KB, 下载次数: 0)

    Untitled.png

    音调统计.xlsx

    25.62 KB, 下载次数: 11, 下载积分: 米 -5 粒

    评分

    2

    查看全部评分

    本帖被以下淘专辑推荐:

  • TA的每日心情
    开心
    2023-3-10 21:15
  • 签到天数: 1329 天

    [LV.10]以坛为家III

    4

    主题

    1342

    回帖

    2万

    积分

    状元

    Rank: 9Rank: 9Rank: 9

    积分
    22253
    推荐
     楼主| 发表于 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拍及以上的不统计。
    以及一些细微的调整。

    因为各人处理的方法不同,你最终得出的统计结果可能和我不太一样。
  • TA的每日心情
    慵懒
    2021-11-14 17:58
  • 签到天数: 999 天

    [LV.10]以坛为家III

    3

    主题

    904

    回帖

    15万

    积分

    状元

    Rank: 9Rank: 9Rank: 9

    积分
    152376

    灌水大神章

    2
    发表于 2019-3-23 22:43:16 | 只看该作者
    本帖最后由 kapan000 于 2019-3-23 22:46 编辑

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

    没想到0声单词这么多
    我一直认为2,3,4...这类最多
  • TA的每日心情
    开心
    2023-3-10 21:15
  • 签到天数: 1329 天

    [LV.10]以坛为家III

    4

    主题

    1342

    回帖

    2万

    积分

    状元

    Rank: 9Rank: 9Rank: 9

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

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

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

    这个EPWING版的新明解好像是通过别的格式转来的,里面有很多东西没转对,问题有点大,最好不要用。
  • TA的每日心情
    慵懒
    2021-11-14 17:58
  • 签到天数: 999 天

    [LV.10]以坛为家III

    3

    主题

    904

    回帖

    15万

    积分

    状元

    Rank: 9Rank: 9Rank: 9

    积分
    152376

    灌水大神章

    4
    发表于 2019-3-23 23:43:22 来自手机 | 只看该作者
    本帖最后由 kapan000 于 2019-3-24 00:01 编辑
    enjoy了哦 发表于 2019-3-23 23:12
    我觉得统计超级大辞林没有必要。原因有以下几点:
    1. 新明解已经收录了常用单词,这个统计是用来指导记忆 ...

    非常感谢。请问下,这个统计是全部单词?是否包含了片假名单词?

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

    谢谢


  • TA的每日心情
    开心
    2020-11-10 14:17
  • 签到天数: 580 天

    [LV.9]以坛为家II

    0

    主题

    1077

    回帖

    9806

    积分

    禁止发言

    积分
    9806
    5
    发表于 2019-3-24 00:48:53 | 只看该作者
    想问下楼主ebdump导出后如何转码为utf8 为什么我转码后,是乱码,求赐教,是需要一些python改动吗
  • TA的每日心情

    前天 12:10
  • 签到天数: 160 天

    [LV.7]常住居民III

    2

    主题

    183

    回帖

    2217

    积分

    解元

    Rank: 5Rank: 5

    积分
    2217
    7
    发表于 2019-3-24 10:05:05 | 只看该作者
    想问下楼主ebdump导出后如何转码为utf8 为什么我转码后,是乱码,求赐教,是需要一些python改动吗
  • TA的每日心情

    前天 12:10
  • 签到天数: 160 天

    [LV.7]常住居民III

    2

    主题

    183

    回帖

    2217

    积分

    解元

    Rank: 5Rank: 5

    积分
    2217
    8
    发表于 2019-3-24 10:12:58 | 只看该作者
    求导出的txt