掌上百科 - PDAWIKI

 找回密码
 免费注册

QQ登录

只需一步,快速开始

查看: 4022|回复: 8

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

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

    [LV.10]以坛为家III

    发表于 2019-3-23 21:42:30 | 显示全部楼层 |阅读模式
    本帖最后由 enjoy了哦 于 2019-3-23 23:23 编辑
    2 w! N9 _) [+ d" m8 b( d
    8 I( S1 D. N; B0 T通过调查日语单词中音调类型的比例,可以得出一些结论,方便记忆单词本身和其后续助词的音调。
    # t+ n5 f5 e5 W  A$ j4 X% I, M
    ' Y: _; m* A( R4 Y原始数据:新明解国语辞典第5版(EPWING格式)$ J/ d$ y) D3 A
    首先通过 EBDump 打开该EPWING格式词典的文件夹的 HONMON 文件,导出其中的“前方一致表記形見出し”部分,选择全部的1412个block。: K7 C* L0 o, Y: U# |. L

    / I& n" j) S2 o
    0 T7 X" ]- {& ]! i/ M" H导出后,将该文件转码成 UTF-8 格式,并使用正则表达式替换部分内容,使其容易被后续分析处理。
    1 g/ g0 R0 O  z$ Z. n* h0 t8 ]% x8 V2 {/ u' _$ s# v
    1 a  r( d! P/ j% q2 V8 [( k* x
    为统计尾高型音调,需要知道每个单词的拍数。由于拗音占有两个字符,但只算一拍,为了方便统计,将其中的小的[ゃ][ゅ][ょ] 及对应的片假名(还有小的[ア][イ][ウ][エ][オ]等,外来词专用音节)去掉,即[きゃ][きゅ][きょ]中后面那个字符。这样一来,拍数就等于字符数了。2 @- W4 @3 ]9 ]: d3 Z4 q

    6 G. r6 {+ t7 V: d最终的经过清洗的“干净”的数据如下所示,根据个人的习惯进行处理:( K' h# c  ^: X& T8 [4 O1 m# |
    " c& }: D9 k! s+ {" X
    * v5 }2 i( o  v3 J0 `8 Z
    然后可以通过 Python 进行统计,一个单词可能有多个音调,但只统计第一个音调(稍微改动源码可以统计所有的音调)。这个代码可以用来明白大致的统计思路,后续还有写零碎的更改,并没有体现在这里面。
    1 \! u( K/ e( B' e
    1. #!/usr/bin/env        python7 \% b4 p7 }8 f6 y4 d5 L
    2. #_*_        coding:utf-8        _*_
      8 H. d3 i# e" D. e9 ^
    3. 2 t6 ]1 b3 G3 ~4 O+ W% C. W7 i
    4. import sys,os3 M2 p' F& Q5 |$ j+ s$ a
    5. import numpy as np0 C# L9 ?& b; o4 e) c6 D

    6. / v3 _3 g- y/ D; v) I
    7. # 带有音调标记的词汇数目0 a. V3 q' O* l2 S1 n  r2 h. r) [
    8. all_entry = 0
      / Z( N' d. E7 y, `
    9. # M# B# R+ W) P2 ^
    10. # 平板型,[0]; Z7 z, U' w# |( e/ m
    11. entry_0 = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]7 t9 S9 q7 a) h# B. K! z
    12. - A. w1 v. H9 d1 ~3 ]" _
    13. # 头高型,[1]1 H8 M9 a; c: j5 w9 ?! s
    14. entry_1 = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]2 s; O, ^- q, c; R

    15. , t, v' q3 T" y/ g+ ]; L
    16. # 尾高型,[x] = 拍数' c" U$ c. _) Q
    17. entry_last_high = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]* [, K# j( j$ `7 T1 p* T& \$ w
    18. 3 e7 a, O6 m/ c0 I, ~( u8 j* i9 B& V
    19. # 中高型,[x] < 拍数
      3 H2 y" W+ {: Q, m& @  \
    20. entry_middle = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]/ }8 w- W7 C% ?8 Q: c4 s( K1 j2 }; _3 S

    21. & n9 z3 q0 {+ z; c% Q' X- V0 `: Z
    22. file_name = sys.argv[1]0 R# B, T1 k( Z" o# h, m% F
    23. f = open(file_name,'rb')7 j$ u& e: g& r* ]. k) s
    24. for line in f:
      ( }& P0 w$ m! }4 x0 n' _
    25.         line = line.replace(b"\r\n",b"")" A5 c+ G: n, m. U4 r1 D
    26.         line = line.decode()
      ' p  u/ X' H8 ~  ]
    27.         db = line.split(',')
      ) r0 m# x7 }' m! Q( [# ]8 t' C
    28.         word_len = len(db[0])
      9 L/ h) N2 G/ V4 s( L
    29.         if word_len < 16:3 T8 u/ t. k/ z/ Z; m: f
    30.                 all_entry = all_entry + 1& T7 }4 a0 K" [' H. E
    31.                 for i in range(1,len(db)):3 {! U! x7 G4 d3 i; M4 C
    32.                         accent = db[i]+ _" [% L0 m$ b% b! P
    33.                         if accent.startswith('['):
      + T' P" w8 E* \0 }1 F
    34.                                 integer = int(accent[1])
      ; E* A5 Q" g- ~5 _' I" B6 f
    35.                                 if integer == 0:
      5 n; X2 C/ ]( J# b+ `% Q8 Z
    36.                                         entry_0[word_len] = entry_0[word_len] + 1
      * j5 u! h6 [# T; L3 z+ S3 J
    37.                                 elif integer == 1:: w+ t- n( u1 j6 E* b5 e
    38.                                         entry_1[word_len] = entry_1[word_len] + 1
      / \3 K; F3 g% X9 D2 j0 v
    39.                                 elif integer == word_len:
      & K% n6 n$ o( Q& O
    40.                                         entry_last_high[word_len] = entry_last_high[word_len] + 1
      ' N& T4 C* S6 Z8 I9 i' T' W# S6 L
    41.                                 else:
        R7 a5 b! [- K7 g
    42.                                         entry_middle[word_len] = entry_middle[word_len] + 1
      % t  l+ M0 S* M" m4 u
    43.                                 break: E7 r2 b$ ^4 H7 T) F! b7 c6 m7 O

    44. 4 l9 G# V1 c# z
    45. print('[0]:')
      ! x) J8 o7 J8 C  e
    46. for i in range(1,len(entry_0)):
      " s5 p$ t; N' d" D
    47.         print('%d' % (entry_0[i]))% L+ r  z$ a3 G
    48. print('entries: %d' % np.sum(entry_0))
      ! g6 M3 X  P  C& d
    49. print('\n')( R/ ?/ y4 S" [! b) F  J) ?8 H0 j  W, ^
    50. # k3 w) @; r) \" a
    51. print('[1]:')! K/ G7 O4 t  q" X& g
    52. for i in range(1,len(entry_1)):! w- d, o9 b1 R' ~
    53.         print('%d' % (entry_1[i]))  O2 p1 M- \9 `$ h& O
    54. print('entries: %d' % np.sum(entry_1))9 U/ M" S% j. p- y
    55. print('\n')
      $ B( ~+ g7 i9 U3 U( m6 P) `" e
    56. / N( Z5 i+ I3 Z% V3 [3 p* X! `9 p+ z- Y
    57. print('middle high:')6 E7 F; W. F' D& {- k6 R, `) z
    58. for i in range(1,len(entry_middle)):
      3 A% `' p: Y8 l% k) v  |
    59.         print('%d' % (entry_middle[i]))# f9 Y3 i: g  E- t, f4 g  I# x  J
    60. print('entries: %d' % np.sum(entry_middle))2 p% v$ l* S- h+ g+ \
    61. print('\n'): C3 k: N. C/ r4 b% L/ h6 B  N

    62. 9 q9 E4 R# t0 _) C+ j% B5 @6 j, G# c
    63. print('last high:')2 c. _$ j6 |: _
    64. for i in range(1,len(entry_last_high)):' c2 r9 I( |' d& G) k6 l
    65.         print('%d' % (entry_last_high[i]))+ j# \3 [* O% G3 o9 v
    66. print('entries: %d' % np.sum(entry_last_high))
      ) g  y% ~1 s) S5 ~5 k1 k9 J# K
    67. print('\n')
      " F& D. i9 q0 N

    68. . l, {; w% s3 v3 p  V4 n% R  v; g: x
    69. print('all entries:')' y3 Z# F4 G5 h0 b* f/ D6 h5 ?4 L) F
    70. print(all_entry)! Z" `8 Q+ g4 Q

    71. 5 R2 a# [  K4 e1 p/ Q
    72. f.close()
    复制代码

    - f5 u7 i: w( G% S! |8 H$ Q& B5 e
    # w. s7 I, d8 g+ j4 [2 M最后将 Python 输出结果进行数据可视化:/ w" D2 h; y, h5 w2 |
    & N% ?/ ~2 |6 g- h6 z" D" I" X! F
    3 p% ?1 o9 l  W7 j+ K
    / T7 P7 _8 M! Z

    " w. K7 g# S0 Z/ ]" v' h& \以及饼图:  F6 {4 l: }% X( M0 `; C) M

    / ?3 M9 U! J, [7 s  \0 N4 L( G6 H3 s! v. g3 w
    可以得出几个结论:" v4 {8 ^  f% s, o, S2 X
    1. 尾高型的单词很少(约2%,大部分在2拍和3拍的单词上,2拍和3拍五五开,总共约1300个单词(在7万多个单词中)。
    + ?7 u$ [  a1 d2. 头高型的单词次少(约17%),主要集中在3拍的单词上(约51%),2拍和4拍都约占20%左右。& w" o" u: w) v6 m
    3. 日语中4拍的单词最多(约42%),并且相当一部分(约72%)是平板型。这和新标日中入门单元里,“声调和语调”部分中“声调”小节里的解说是一样的。' y4 R% i, g) r: i# n) \5 U6 L& F
    4. 记忆平板型和尾高型的单词时,单词本身发音规律相同,都是前低后高,但后接的助词音调不同,不好记忆。但通过上述统计,可以这么做:(两拍以上)尾高型的单词单独记忆后续助词的音调,其后续助词的音调总是低的,而在一般情况下,一个单词(两拍以上)后接的助词的音调(高或低)和该单词的最后一拍是相同的。一拍的单词完全不符合这个“一般情况”,只需要记住这一拍本身是低还是高,再根据“一个单词中第一拍和第二拍音调必定不同”来确定助词音调。单词本身的音调则通过多听、多用以形成固定的记忆。
    5 [4 ~4 Q" d5 }+ d6 M- F
    / D- b% T* [, k
    & @  ~) s- r1 g. o1 H% @5 L, x6 W) ?4 b7 L

    7 d1 H2 R: H! y3 Q$ P9 X& L9 K& E9 y* T! H% r0 z. }8 {1 S

    # c, Q: [- t& g- H6 w* o+ ?! a+ l3 W7 I" N

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有账号?免费注册

    x

    评分

    2

    查看全部评分

    本帖被以下淘专辑推荐:

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

    [LV.10]以坛为家III

     楼主| 发表于 2019-3-24 07:52:11 | 显示全部楼层
    kriskr 发表于 2019-3-24 00:48
    % `  E& W& s: t) r) z" ?. p想问下楼主ebdump导出后如何转码为utf8 为什么我转码后,是乱码,求赐教,是需要一些python改动吗 ...

    0 O7 M, f4 L, t文本编辑我一般用 notepad++,开源又好用。其中的 Encoding 菜单中有个Convert to UTF-8,可以转码。- Q6 @7 j% R8 j% n
    : {4 s( v# ~) m. J% p* n* F
    在正则表达式替换的过程中,做了如下处理:( K& \0 g% s$ f4 q
    1. 删除了多个单词组成的条目。这种条目分别对每一个组成单词都标注了音调。
    ) N! i* v' p" @8 H4 \0 E2. 声调类型统计只统计0-9,10及以上不统计。! }. w4 c% l7 R
    3. 拍数在16拍及以上的不统计。
    ! S4 I1 U, |3 |) V; t, W  B9 M以及一些细微的调整。
    3 K7 P8 M' ~, \7 F5 j0 \5 k3 b$ E! S. x! w# O" E
    因为各人处理的方法不同,你最终得出的统计结果可能和我不太一样。
  • TA的每日心情
    慵懒
    2021-11-14 17:58
  • 签到天数: 999 天

    [LV.10]以坛为家III

    发表于 2019-3-23 22:43:16 | 显示全部楼层
    本帖最后由 kapan000 于 2019-3-23 22:46 编辑
    & ]9 P* a/ O- V' b' [$ R3 J' U% q# G4 y7 |7 F
    请教几个问题4 C7 k7 j6 b  e, \4 N7 N0 y
    1、新明解单词数较少,可否统计下超级大辞林?
    % Q) l+ F( D) ~5 o- D9 S! f$ {9 c* I2、统计饼图,可否给出所占比例和数量。这样更好看点。6 A# ~9 L) c( @( f7 M* d" s* k
    3、可否给出统计的xls?我想再算下,10拍以内,各拍那个声调多一点及其比例
    6 x( F+ X7 H4 ]- t) ~- v) H. o3 N% w+ u7 P3 V/ K
    没想到0声单词这么多
    0 z0 Y, z+ s) z( G- _我一直认为2,3,4...这类最多
  • TA的每日心情
    开心
    2023-3-10 21:15
  • 签到天数: 1329 天

    [LV.10]以坛为家III

     楼主| 发表于 2019-3-23 23:12:18 | 显示全部楼层
    kapan000 发表于 2019-3-23 22:437 [: ?3 ^) L% D! Y- F- L
    请教几个问题' r( E$ ~* U' s7 E1 q4 t
    1、新明解单词数较少,可否统计下超级大辞林?
    & N+ V) Q5 M+ V( m$ M2、统计饼图,可否给出所占比例和数量。这样更 ...

    & C2 l# F( P1 E  f4 M* P我觉得统计超级大辞林没有必要。原因有以下几点:
    9 A' p( ~8 x' d7 z; r/ S0 W1. 新明解已经收录了常用单词,这个统计是用来指导记忆声调的,对常用7万单词的统计我觉得真的已经足够了。
    1 ?) P$ b, o8 S& l( _2 Z2. 要对超级大辞林进行数据清洗是非常麻烦的。其中的百科词条等,也不太常用。
    / Q% T; b" m! |  d) @9 S. i3. 超级大辞林中的大量片假名词语(外来词等),其声调相比常用和语、汉语词汇,没有那么固定。如果将其纳入统计,我觉得并不具有代表性。6 O) G( E, Z" C
    4. 对于超级大辞林中古语的声调,我觉得统计了也没有什么代表性,我学现代日语就已经够呛了。
    3 d5 N7 b- j) @6 W& e- [9 {; E6 o, V9 U- `5 p
    学日语真心推荐新明解,你可能觉得它收词量小,但是它还告诉你词汇的用法,一些有用的信息等。
    3 F/ O4 m# \" o! N, r# i# I* j6 M) b) U
    这个EPWING版的新明解好像是通过别的格式转来的,里面有很多东西没转对,问题有点大,最好不要用。
  • TA的每日心情
    慵懒
    2021-11-14 17:58
  • 签到天数: 999 天

    [LV.10]以坛为家III

    发表于 2019-3-23 23:43:22 来自手机 | 显示全部楼层
    本帖最后由 kapan000 于 2019-3-24 00:01 编辑 $ c0 F2 k: A  ]
    enjoy了哦 发表于 2019-3-23 23:12
    $ _; V4 z8 _  i5 L: Q( n+ F我觉得统计超级大辞林没有必要。原因有以下几点:" `: Z1 e% [( j
    1. 新明解已经收录了常用单词,这个统计是用来指导记忆 ...
    8 r. w7 V8 a. M- y8 Z; z% }4 T
    非常感谢。请问下,这个统计是全部单词?是否包含了片假名单词?
    1 s1 W- c9 L  z  H: Z! F+ t. s( M
    - A0 W: Q% m: j+ |. @' ?0 ~( I如果可以的话,能否再统计以下3个纬度/ o8 w7 f% ~- B$ M- ~0 `
    这样就更细化,明白了
    ' V( Y$ p* V8 d$ d: ]0 s$ M纯片假名
    5 x- Z0 s+ e6 b4 B有汉字的
    ( P. `) ?$ H- j: u3 N2 A纯平假名的,即完全无汉字的1 W# n8 b' n* d% k7 ?

    % o- r! n3 m6 [谢谢
    & \3 _9 b* k, _& d6 y- g. d& o; b

    ) A* R/ D, L5 n$ d( x7 C
  • TA的每日心情
    开心
    2020-11-10 14:17
  • 签到天数: 580 天

    [LV.9]以坛为家II

    发表于 2019-3-24 00:48:53 | 显示全部楼层
    想问下楼主ebdump导出后如何转码为utf8 为什么我转码后,是乱码,求赐教,是需要一些python改动吗
  • TA的每日心情

    2023-4-8 13:06
  • 签到天数: 169 天

    [LV.7]常住居民III

    发表于 2019-3-24 10:05:05 | 显示全部楼层
    想问下楼主ebdump导出后如何转码为utf8 为什么我转码后,是乱码,求赐教,是需要一些python改动吗
  • TA的每日心情

    2023-4-8 13:06
  • 签到天数: 169 天

    [LV.7]常住居民III

    发表于 2019-3-24 10:12:58 | 显示全部楼层
    求导出的txt
    您需要登录后才可以回帖 登录 | 免费注册

    本版积分规则

    小黑屋|手机版|Archiver|PDAWIKI |网站地图

    GMT+8, 2026-7-24 17:52 , Processed in 0.021538 second(s), 24 queries .

    Powered by Discuz! X3.4

    © 2001-2023 Discuz! Team.

    快速回复 返回顶部 返回列表