掌上百科 - PDAWIKI

 找回密码
 免费注册

QQ登录

只需一步,快速开始

查看: 4229|回复: 8

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

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

    [LV.10]以坛为家III

    发表于 2019-3-23 21:42:30 | 显示全部楼层 |阅读模式
    本帖最后由 enjoy了哦 于 2019-3-23 23:23 编辑 ' t# e! b: X4 x4 x; d3 p3 D
    7 K( o, V  u& L9 m- @3 Q
    通过调查日语单词中音调类型的比例,可以得出一些结论,方便记忆单词本身和其后续助词的音调。# L8 @/ \+ _% k$ R, i' ~% B

    : A* O; u$ P0 k+ ^8 ~0 O原始数据:新明解国语辞典第5版(EPWING格式)" L: z1 x& D+ L2 {1 \/ e8 q
    首先通过 EBDump 打开该EPWING格式词典的文件夹的 HONMON 文件,导出其中的“前方一致表記形見出し”部分,选择全部的1412个block。: ]6 T, M" i% R, c6 Y
    2 d" ], K4 F# p1 v" U2 I( G

    * w! V! P0 k1 v导出后,将该文件转码成 UTF-8 格式,并使用正则表达式替换部分内容,使其容易被后续分析处理。: }5 E) D6 Y3 K' d# g

    . ?( A  R: W' B9 `
    - X3 p% _; T4 |为统计尾高型音调,需要知道每个单词的拍数。由于拗音占有两个字符,但只算一拍,为了方便统计,将其中的小的[ゃ][ゅ][ょ] 及对应的片假名(还有小的[ア][イ][ウ][エ][オ]等,外来词专用音节)去掉,即[きゃ][きゅ][きょ]中后面那个字符。这样一来,拍数就等于字符数了。
    " j5 o4 r; |8 b( t6 Z
    ! S9 p+ g' @6 g最终的经过清洗的“干净”的数据如下所示,根据个人的习惯进行处理:0 c1 N1 I0 z* }3 Y" I0 u

    " E' j$ Z( f" E7 A7 z* M) ^. \) ]+ A8 u
    然后可以通过 Python 进行统计,一个单词可能有多个音调,但只统计第一个音调(稍微改动源码可以统计所有的音调)。这个代码可以用来明白大致的统计思路,后续还有写零碎的更改,并没有体现在这里面。
    - z( _; U- P* ~$ e1 m
    1. #!/usr/bin/env        python0 _  k! `0 m4 w$ }2 A
    2. #_*_        coding:utf-8        _*_" o! t) W- _, {" R
    3. 6 o9 a& W' v- Z3 `: M9 `
    4. import sys,os
      $ z  Q5 n# N' B2 D3 Q0 I+ e
    5. import numpy as np8 I5 q0 j/ L6 L( I% A$ h
    6. 2 y! c5 w0 I/ {& c# ^1 P" R
    7. # 带有音调标记的词汇数目) U" W. n4 C6 f6 I$ R1 D+ \
    8. all_entry = 0
      : ], G  x  H. n

    9. . n, H: g( `3 H  `2 A* K
    10. # 平板型,[0]: s9 z+ c' T  ~3 L& i; b2 t
    11. entry_0 = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
      - w/ L) Y* m4 d, D, B: r4 n& ]- ?

    12. 8 S3 d7 U& l3 u: \
    13. # 头高型,[1]
        }- D; @4 ^; K' R
    14. entry_1 = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
      5 \9 {* h% D0 D; J" X
    15. # l! h( R0 L' ^# i
    16. # 尾高型,[x] = 拍数0 K! ~" E( y% g" ~# F2 @; K
    17. entry_last_high = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]+ ]! Z& @5 p: h. b( l
    18. " o8 r4 o" |# @+ F3 E
    19. # 中高型,[x] < 拍数
      + J: i" M- O6 Z: m  I9 ^) n3 ^7 ^
    20. entry_middle = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
        h5 }* G# Q6 S0 r
    21. ! t; x! D4 j, l! y8 P8 }
    22. file_name = sys.argv[1]5 p# i3 U1 q$ I7 p5 p* C
    23. f = open(file_name,'rb')$ o$ M$ y/ y. n/ P1 U4 U) @
    24. for line in f:$ X1 L( g. I% B9 y6 s' \1 ^
    25.         line = line.replace(b"\r\n",b"")" o" `4 r  q1 n# |% ^8 g8 d- O$ j
    26.         line = line.decode()
      6 }% e. R1 y8 W; w2 u7 I, e8 k1 @
    27.         db = line.split(','): H" N& O& s: X3 t' p3 s
    28.         word_len = len(db[0])
      9 @" d. J6 a4 g9 a! E9 e( z' `/ `
    29.         if word_len < 16:
      ( h& M7 r# d! ^( I7 y
    30.                 all_entry = all_entry + 1
      3 W# I2 J0 C; Y# B) z8 R8 Q3 P
    31.                 for i in range(1,len(db)):6 n* z8 D% X  R2 L& l# _* t
    32.                         accent = db[i]
      , S' l" F" S) j# _! w
    33.                         if accent.startswith('['):
      2 T9 k* r3 _" n2 k5 j1 W
    34.                                 integer = int(accent[1])8 w: W. V" y( [5 ^: i( \  i6 z7 L& A
    35.                                 if integer == 0:+ O0 T+ V- G3 G
    36.                                         entry_0[word_len] = entry_0[word_len] + 15 F/ |: ]2 l+ Y+ ]$ v, i3 ]
    37.                                 elif integer == 1:
      ) [- w" M6 F$ A4 C& S
    38.                                         entry_1[word_len] = entry_1[word_len] + 1
      8 `8 c. {, @1 l, b0 z
    39.                                 elif integer == word_len:
      5 l/ m) `  y$ t  J  I
    40.                                         entry_last_high[word_len] = entry_last_high[word_len] + 1
      ; L2 R4 i5 ^( a. [( C# x/ Z2 I
    41.                                 else:$ p0 Z2 r: {; z$ z
    42.                                         entry_middle[word_len] = entry_middle[word_len] + 1+ |; m) ?- U7 j2 g7 `; j
    43.                                 break
        L5 W, C: \  u
    44. , V5 j' R: ~; I2 h8 T6 t6 ?
    45. print('[0]:')
      , w! v2 n( k" ^3 b
    46. for i in range(1,len(entry_0)):
      7 S! P& }7 @" E
    47.         print('%d' % (entry_0[i]))
      5 B' q8 `8 _2 {% D4 U. n
    48. print('entries: %d' % np.sum(entry_0))" }3 j4 e4 O! p! G. ?' u
    49. print('\n')( m# K' y! f- X( A2 h. ]! V4 c
    50. 7 ?" \) w, T5 r( r! s) K
    51. print('[1]:')" {4 z: ]) N+ V' @
    52. for i in range(1,len(entry_1)):4 {8 m/ v% j( f; r
    53.         print('%d' % (entry_1[i]))
        l# k, w: B4 p$ u- V
    54. print('entries: %d' % np.sum(entry_1))6 O  k3 L  C/ p; P0 {
    55. print('\n')
      $ w( W; R/ e5 T
    56. 1 ?. f2 S( v3 w3 O; n9 Y
    57. print('middle high:')
      & }) j# Q7 M4 w- ?6 Y
    58. for i in range(1,len(entry_middle)):. W3 W4 ~0 H  G9 A  y, d# ]+ j) l
    59.         print('%d' % (entry_middle[i]))
      2 {- \  S5 D- g5 F8 e& ~3 p$ [
    60. print('entries: %d' % np.sum(entry_middle))' a3 L1 N$ n( o. Q( ~
    61. print('\n')
      , z; ~0 W. Y/ ~- k
    62. 7 P) P  i3 D& k* B1 V( S! k
    63. print('last high:')
      9 n9 J0 W+ m5 A
    64. for i in range(1,len(entry_last_high)):
      ) e7 c' O2 X2 \$ t
    65.         print('%d' % (entry_last_high[i])), P4 S  X4 H, Z
    66. print('entries: %d' % np.sum(entry_last_high))
      3 p) w5 e5 y  q$ v1 q+ u
    67. print('\n')( ]0 o/ G! t  d% @

    68. 4 C9 w! L$ C! a) m; i3 }
    69. print('all entries:')
      7 k' V: D$ z4 D( {; L
    70. print(all_entry)# W% @+ s" Q9 h4 |  i( E( o1 j

    71.   v( N7 X! f: U& x% `3 E
    72. f.close()
    复制代码

    0 e4 Q, ?" K* ]& H# R
    3 G" m- b9 y3 E8 b, \: [6 C: ]8 [+ B最后将 Python 输出结果进行数据可视化:
    : I7 c, A7 n+ j. Z2 t9 y% w$ S8 B3 z' T- w5 {
      a9 o* j. A- O
    9 P8 H2 j7 T0 [+ M! L4 E

    4 V% u8 \' N" C以及饼图:( m, h- M; h% m5 Y# I5 i

    9 {$ P2 x* E; b2 ~) A3 q
    " X4 W) ^" c, ]! f9 ]可以得出几个结论:& f0 g6 i4 D" S% n3 y. P
    1. 尾高型的单词很少(约2%,大部分在2拍和3拍的单词上,2拍和3拍五五开,总共约1300个单词(在7万多个单词中)。
    " `7 a" s1 _5 ]  U$ B* i2. 头高型的单词次少(约17%),主要集中在3拍的单词上(约51%),2拍和4拍都约占20%左右。
    . ?2 b5 w4 T6 l8 t% ?3. 日语中4拍的单词最多(约42%),并且相当一部分(约72%)是平板型。这和新标日中入门单元里,“声调和语调”部分中“声调”小节里的解说是一样的。
    9 O9 L6 m# W8 E" E4. 记忆平板型和尾高型的单词时,单词本身发音规律相同,都是前低后高,但后接的助词音调不同,不好记忆。但通过上述统计,可以这么做:(两拍以上)尾高型的单词单独记忆后续助词的音调,其后续助词的音调总是低的,而在一般情况下,一个单词(两拍以上)后接的助词的音调(高或低)和该单词的最后一拍是相同的。一拍的单词完全不符合这个“一般情况”,只需要记住这一拍本身是低还是高,再根据“一个单词中第一拍和第二拍音调必定不同”来确定助词音调。单词本身的音调则通过多听、多用以形成固定的记忆。
    5 @3 C7 U' c! b
    8 L5 V: K0 s: m) _; D
    0 d$ l7 Q7 m/ ^( ]" F; t: L5 ]& E; y7 b/ n. M1 {- w
      q4 j5 j1 H6 N& \% |( N% A4 N
    2 f5 U1 l/ o( y: f

    6 W0 ^/ i: P6 s; @
    2 i7 ]* W/ q* n& Z9 K4 W0 [& Q- P

    本帖子中包含更多资源

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

    x

    评分

    2

    查看全部评分

    本帖被以下淘专辑推荐:

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

    [LV.10]以坛为家III

     楼主| 发表于 2019-3-24 07:52:11 | 显示全部楼层
    kriskr 发表于 2019-3-24 00:48
    ; p5 g5 l+ E4 v3 B想问下楼主ebdump导出后如何转码为utf8 为什么我转码后,是乱码,求赐教,是需要一些python改动吗 ...

    : m5 t2 m/ J8 d3 E& ~文本编辑我一般用 notepad++,开源又好用。其中的 Encoding 菜单中有个Convert to UTF-8,可以转码。
    + n5 n7 [) q9 D  l5 z( C2 z) h5 H* [% ~% Q1 c; }, a# i& Z
    在正则表达式替换的过程中,做了如下处理:  R$ b' `% P9 S* f! W5 a4 G0 [" h+ i. n( E
    1. 删除了多个单词组成的条目。这种条目分别对每一个组成单词都标注了音调。6 S9 y( S9 ]2 b8 _8 x; u
    2. 声调类型统计只统计0-9,10及以上不统计。6 E# \% b3 W; ]; w
    3. 拍数在16拍及以上的不统计。
    + `' p. ^7 J& K" b以及一些细微的调整。6 ?5 `7 d# _+ e4 n

    5 u$ f. a: K# U4 `, o5 X2 z! q因为各人处理的方法不同,你最终得出的统计结果可能和我不太一样。
  • TA的每日心情
    慵懒
    2021-11-14 17:58
  • 签到天数: 999 天

    [LV.10]以坛为家III

    发表于 2019-3-23 22:43:16 | 显示全部楼层
    本帖最后由 kapan000 于 2019-3-23 22:46 编辑
    " M5 f% H6 Q/ y% b/ Z' k
    ) R$ P0 C, J1 j请教几个问题
    % j2 u  M# ]( s  Y+ _1、新明解单词数较少,可否统计下超级大辞林?7 x' Y, }  m4 q8 R- W- E
    2、统计饼图,可否给出所占比例和数量。这样更好看点。9 b  h6 Q2 y: z1 A
    3、可否给出统计的xls?我想再算下,10拍以内,各拍那个声调多一点及其比例9 {8 F: x/ X3 U/ |" I8 o; n' x6 R0 j

    ' |: L% n& n. N* x. U8 M没想到0声单词这么多( _2 [  N6 l9 a6 F9 P
    我一直认为2,3,4...这类最多
  • TA的每日心情
    开心
    2023-3-10 21:15
  • 签到天数: 1329 天

    [LV.10]以坛为家III

     楼主| 发表于 2019-3-23 23:12:18 | 显示全部楼层
    kapan000 发表于 2019-3-23 22:43
    1 A" V" d( J3 l6 ^' i+ _; C9 e; M  n9 a请教几个问题2 Z0 S3 {' [, q$ I) Y
    1、新明解单词数较少,可否统计下超级大辞林?! ], H1 Y. t0 s( K
    2、统计饼图,可否给出所占比例和数量。这样更 ...
    0 s7 f: x$ f- r# X& h
    我觉得统计超级大辞林没有必要。原因有以下几点:
    / q6 U. T" g9 n1 b5 m7 y5 y: S+ r1. 新明解已经收录了常用单词,这个统计是用来指导记忆声调的,对常用7万单词的统计我觉得真的已经足够了。6 q( B: n; N8 G7 C
    2. 要对超级大辞林进行数据清洗是非常麻烦的。其中的百科词条等,也不太常用。- c! ^$ w& P+ r6 r5 {
    3. 超级大辞林中的大量片假名词语(外来词等),其声调相比常用和语、汉语词汇,没有那么固定。如果将其纳入统计,我觉得并不具有代表性。3 a: @8 {1 Y0 q& K: h( \
    4. 对于超级大辞林中古语的声调,我觉得统计了也没有什么代表性,我学现代日语就已经够呛了。% l  b' j% [' _4 L% ~$ J" }1 E0 A+ D9 j
    " Z4 a: Y9 U, d. A+ l* b8 a) s
    学日语真心推荐新明解,你可能觉得它收词量小,但是它还告诉你词汇的用法,一些有用的信息等。, N1 w4 e- R  V/ Y3 }" [* L
    : ]- D. l+ B" Y( M" l$ a/ A: j
    这个EPWING版的新明解好像是通过别的格式转来的,里面有很多东西没转对,问题有点大,最好不要用。
  • TA的每日心情
    慵懒
    2021-11-14 17:58
  • 签到天数: 999 天

    [LV.10]以坛为家III

    发表于 2019-3-23 23:43:22 来自手机 | 显示全部楼层
    本帖最后由 kapan000 于 2019-3-24 00:01 编辑
    * V5 w4 V+ `4 \# e) X( }1 d
    enjoy了哦 发表于 2019-3-23 23:12
      s1 a3 a9 B6 k我觉得统计超级大辞林没有必要。原因有以下几点:
    2 y7 F  s/ ^; M' p" V7 M1. 新明解已经收录了常用单词,这个统计是用来指导记忆 ...

    ( e' z) V/ A% O" \非常感谢。请问下,这个统计是全部单词?是否包含了片假名单词?
    " p, g( h* W+ z2 g: p! u6 j6 W5 D) V% ~- k" _
    如果可以的话,能否再统计以下3个纬度
    ) w* Q# L1 f* j3 d& ^这样就更细化,明白了3 \2 }: U, o, Q9 r
    纯片假名/ g1 g) t; B. k/ i9 v4 l
    有汉字的0 M$ u; f! ]/ R7 ~% r
    纯平假名的,即完全无汉字的
    # h. y  [  d: t& K# U0 N5 C! A1 L; h8 N& m9 E7 b6 j! v% X8 W
    谢谢0 Q& P& X6 }8 O  X+ m
    5 B. p6 z, J* o9 A8 w, _4 C9 c
    5 n6 Q; F' U/ e" K6 k
  • 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-9-8 15:57 , Processed in 0.021569 second(s), 24 queries .

    Powered by Discuz! X3.4

    © 2001-2023 Discuz! Team.

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