掌上百科 - PDAWIKI

 找回密码
 免费注册

QQ登录

只需一步,快速开始

查看: 2845|回复: 8

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

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

    [LV.10]以坛为家III

    发表于 2019-3-23 21:42:30 | 显示全部楼层 |阅读模式
    本帖最后由 enjoy了哦 于 2019-3-23 23:23 编辑 " n% L+ _( `! G. H& A

    + ^8 s. M9 o( x; [  x通过调查日语单词中音调类型的比例,可以得出一些结论,方便记忆单词本身和其后续助词的音调。
    " R8 S2 Y. x0 Q2 Y
    0 m9 l' R) B) R  `5 E7 o* h7 N原始数据:新明解国语辞典第5版(EPWING格式)
    + o" m* e# |" v3 U! c! e1 @2 t  N' J首先通过 EBDump 打开该EPWING格式词典的文件夹的 HONMON 文件,导出其中的“前方一致表記形見出し”部分,选择全部的1412个block。
    6 n- G9 x! u( R1 U, I' H' X+ y
    2 g  R: Z$ y+ J3 s; ]/ \; Z) ?( V* p; i' E
    导出后,将该文件转码成 UTF-8 格式,并使用正则表达式替换部分内容,使其容易被后续分析处理。
    , w/ R; W7 L  p+ V$ F1 t3 P: J3 {- F
    + _4 C) I) B3 B& M/ R4 y
    ! l4 |8 {2 s% b) [- C$ I为统计尾高型音调,需要知道每个单词的拍数。由于拗音占有两个字符,但只算一拍,为了方便统计,将其中的小的[ゃ][ゅ][ょ] 及对应的片假名(还有小的[ア][イ][ウ][エ][オ]等,外来词专用音节)去掉,即[きゃ][きゅ][きょ]中后面那个字符。这样一来,拍数就等于字符数了。# G& c9 r; X( q4 o' p; W

    $ e7 L! s% R% T' L最终的经过清洗的“干净”的数据如下所示,根据个人的习惯进行处理:% E* \" w) h+ l- n0 R7 o% j1 Q

    , G3 X& j# _/ ^1 H1 j- J* K  ^7 L4 h) O( H
    然后可以通过 Python 进行统计,一个单词可能有多个音调,但只统计第一个音调(稍微改动源码可以统计所有的音调)。这个代码可以用来明白大致的统计思路,后续还有写零碎的更改,并没有体现在这里面。/ i6 r3 E0 Y- Z+ F
    1. #!/usr/bin/env        python
      * h6 S+ P% P  i/ o
    2. #_*_        coding:utf-8        _*_
      ) R# }. @1 T- _% o5 f

    3.   h8 m0 V$ m; Y7 J, U& C& Q
    4. import sys,os  b6 h) q5 D  F' h  L+ |" Q- x
    5. import numpy as np: o* G& U( H* E- f& r. t- a# g
    6. . q% f' X2 C# K( D: Q+ Q
    7. # 带有音调标记的词汇数目
      0 L/ J# ~) s' @: F; E
    8. all_entry = 0: e0 E6 O0 r; {: X& V
    9.   V4 e4 A; j$ M5 {( ^& ~% }" V
    10. # 平板型,[0]# P$ z, a3 F  U3 a/ D. e# Q% r2 R4 y) U
    11. entry_0 = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
      1 ]6 F  z2 \4 Z# Y+ i" Y

    12. 5 x% ^2 U4 @9 H7 \$ [9 f$ i- v
    13. # 头高型,[1]( P( E( s+ S$ F
    14. entry_1 = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]& C2 E& _; z6 w. t" x8 l: ]
    15. ! J! B9 }4 ^# h' m! g1 ?, G) ^
    16. # 尾高型,[x] = 拍数
      * ]8 l: l$ h  I
    17. entry_last_high = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]& h9 H. A1 A$ h0 c  P2 ]

    18. , @3 X$ ^4 V: D5 Q
    19. # 中高型,[x] < 拍数
      6 ]7 N+ `3 J3 G& k
    20. entry_middle = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]& s. `2 R; C' H2 R4 r6 }& ?

    21. - {1 [& @8 f  p
    22. file_name = sys.argv[1], x! Q: C6 ~1 p7 C) u7 q! p* W
    23. f = open(file_name,'rb')
      5 \% F$ X: U3 j9 v; _$ u- i; `" ]
    24. for line in f:
      ' M1 q; G, a3 l) Q
    25.         line = line.replace(b"\r\n",b"")
      8 g. p& D$ \; ~" b  y
    26.         line = line.decode()
      7 y3 ?4 F( K4 y, g' ~1 e
    27.         db = line.split(',')6 ~* l* \2 _0 ]! e
    28.         word_len = len(db[0])
      # L- L5 S' |$ ~7 [4 ^
    29.         if word_len < 16:
        u) f& c( `9 ?# ], \8 l# C
    30.                 all_entry = all_entry + 1
      1 H- K* m2 I9 G
    31.                 for i in range(1,len(db)):1 t3 w- N6 _% l' Q& J- X
    32.                         accent = db[i]2 _% y/ |2 K+ |$ H5 l
    33.                         if accent.startswith('['):' Q. i! J- P! r9 ]7 F
    34.                                 integer = int(accent[1])- u0 ^7 I0 u- _/ L2 c0 M
    35.                                 if integer == 0:
      ! y  Q+ k7 E) ^  ?
    36.                                         entry_0[word_len] = entry_0[word_len] + 1
      0 W% n8 B$ s3 P7 N# k
    37.                                 elif integer == 1:
      8 }- @+ }  y9 N! w
    38.                                         entry_1[word_len] = entry_1[word_len] + 1& P5 d2 R5 P- e( T* S  t
    39.                                 elif integer == word_len:1 h% m1 G6 [3 I/ E( d
    40.                                         entry_last_high[word_len] = entry_last_high[word_len] + 1
      7 e; N$ l; u$ Q, [
    41.                                 else:' s; s5 H2 J& V4 g; q: b
    42.                                         entry_middle[word_len] = entry_middle[word_len] + 1+ X1 }* m. R$ i% F5 Q7 M6 t
    43.                                 break
      3 S7 J. H. _, a2 V; Q
    44. 2 s' o8 x$ ]- t7 N# j( n# o  M
    45. print('[0]:')
      3 D7 Z% L4 v7 T1 A
    46. for i in range(1,len(entry_0)):& Q' i. h& w7 W5 d" u4 {' J8 O# t7 B' C
    47.         print('%d' % (entry_0[i]))
      " m3 K% {1 R9 r; x  ~5 A. j
    48. print('entries: %d' % np.sum(entry_0))$ L/ g( M- W* m5 i$ t. r$ H
    49. print('\n')
      2 \. r+ w. [6 `' ~9 A# x  |
    50. * k/ s! a* e: J- P8 X) t
    51. print('[1]:')1 f% g  _  C. N/ @, a
    52. for i in range(1,len(entry_1)):
      3 |# N0 z$ Y6 f, C9 ?9 D8 E  X: x  z
    53.         print('%d' % (entry_1[i]))% z: e/ K8 t/ l5 B% {2 }2 {
    54. print('entries: %d' % np.sum(entry_1))7 E* G; ^9 R3 c0 E& s" R
    55. print('\n')( M) H- D8 D1 J  ]- E1 i
    56. 8 s* U# j2 ?% ]9 H0 Q
    57. print('middle high:')! k% c( b' T1 t3 @$ k- j  |
    58. for i in range(1,len(entry_middle)):8 M. j8 a6 M8 M" j9 g* \' I
    59.         print('%d' % (entry_middle[i]))6 d) V& V7 Z3 F5 o% `0 h
    60. print('entries: %d' % np.sum(entry_middle))% M" b; ~% h  M0 x; H
    61. print('\n')
      4 B# R6 d/ `4 O$ `+ z- `
    62. $ P: d$ V' F, T. q
    63. print('last high:')$ b' T3 s9 C6 j0 k" M% _7 z2 c( K
    64. for i in range(1,len(entry_last_high)):6 |  }; n8 N0 B3 p" w/ `5 y$ _
    65.         print('%d' % (entry_last_high[i]))
      . V" n% X" S1 l2 \, ]) c. W
    66. print('entries: %d' % np.sum(entry_last_high))
      # Z' P1 P! I# z2 p  P
    67. print('\n')
      9 \( b( B7 V1 y! m) j( a7 a
    68. 7 w+ ~1 y9 ^) U. P/ g
    69. print('all entries:')0 \4 y& }# Z4 v/ |
    70. print(all_entry)
      5 r: ~  k; E  k* D/ _2 `0 V
    71. ; R4 ?; s/ H" e7 n
    72. f.close()
    复制代码

    : ^( t/ |) y; h- T$ k9 X5 i
    5 B6 ~5 w, t% q最后将 Python 输出结果进行数据可视化:  }7 s3 z3 Q9 ^6 Z3 \5 z
      |0 L4 b" I7 r6 w0 [4 s' l

    . w8 `* P3 d9 d0 j! q4 S5 t/ k6 q9 n1 w" u) \

    4 d# Y: `; a0 o1 T/ c以及饼图:4 E- t6 z% ~5 J( D

    8 R8 W( \0 [* h3 `* f( r$ @% w1 E
    可以得出几个结论:* D2 m- f7 p+ c! C
    1. 尾高型的单词很少(约2%,大部分在2拍和3拍的单词上,2拍和3拍五五开,总共约1300个单词(在7万多个单词中)。
    + [! ?  Q  t9 r0 h1 L) K2. 头高型的单词次少(约17%),主要集中在3拍的单词上(约51%),2拍和4拍都约占20%左右。# t! E( |( L; ^8 c6 A  Z7 ^( k
    3. 日语中4拍的单词最多(约42%),并且相当一部分(约72%)是平板型。这和新标日中入门单元里,“声调和语调”部分中“声调”小节里的解说是一样的。, r( S  c/ U3 T* o8 @0 M
    4. 记忆平板型和尾高型的单词时,单词本身发音规律相同,都是前低后高,但后接的助词音调不同,不好记忆。但通过上述统计,可以这么做:(两拍以上)尾高型的单词单独记忆后续助词的音调,其后续助词的音调总是低的,而在一般情况下,一个单词(两拍以上)后接的助词的音调(高或低)和该单词的最后一拍是相同的。一拍的单词完全不符合这个“一般情况”,只需要记住这一拍本身是低还是高,再根据“一个单词中第一拍和第二拍音调必定不同”来确定助词音调。单词本身的音调则通过多听、多用以形成固定的记忆。
    $ C" E& ^' z6 J0 V+ _' [" h! x3 u: i' h( O) i

      R5 E, Q! }0 k& \$ r
    - N6 {: }8 q: B! ~9 V$ j. f9 C6 {  X) b& q

    " Y- b- a3 H5 `9 W2 q" J/ s
      e$ n  y% {0 [) M  ?% J1 O1 v$ n: ^& ]; R2 w

    本帖子中包含更多资源

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

    x

    评分

    2

    查看全部评分

    本帖被以下淘专辑推荐:

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

    [LV.10]以坛为家III

     楼主| 发表于 2019-3-24 07:52:11 | 显示全部楼层
    kriskr 发表于 2019-3-24 00:482 D/ J. ^# e# @
    想问下楼主ebdump导出后如何转码为utf8 为什么我转码后,是乱码,求赐教,是需要一些python改动吗 ...
    ' a+ y1 o/ C: S5 n- V
    文本编辑我一般用 notepad++,开源又好用。其中的 Encoding 菜单中有个Convert to UTF-8,可以转码。4 ~0 K: S9 f5 m* c

    9 W1 _* a" w/ n" j  Q: i  [. R在正则表达式替换的过程中,做了如下处理:
    ) n9 H8 g' {/ K& n7 m' E" J1. 删除了多个单词组成的条目。这种条目分别对每一个组成单词都标注了音调。  u: X; @2 ?9 C* [. Q' [+ ]7 s
    2. 声调类型统计只统计0-9,10及以上不统计。8 W" L. {* U( \6 }! S0 n) K
    3. 拍数在16拍及以上的不统计。0 _! p* q' X1 y; e# N6 C" T: ^
    以及一些细微的调整。
    0 v- f5 F# J9 N4 j/ P7 ~" G$ n* {4 H4 B+ w9 Y, U
    因为各人处理的方法不同,你最终得出的统计结果可能和我不太一样。
  • TA的每日心情
    慵懒
    2021-11-14 17:58
  • 签到天数: 999 天

    [LV.10]以坛为家III

    发表于 2019-3-23 22:43:16 | 显示全部楼层
    本帖最后由 kapan000 于 2019-3-23 22:46 编辑 , D8 U/ y# ?  M- y. q5 f
    , |8 ^6 p  v' G6 N
    请教几个问题
      ^! V# X% r9 b+ H  n1、新明解单词数较少,可否统计下超级大辞林?
    . z1 [2 c+ j5 g; C. W  K" M2、统计饼图,可否给出所占比例和数量。这样更好看点。
    $ B1 x4 ^! F" T7 b3、可否给出统计的xls?我想再算下,10拍以内,各拍那个声调多一点及其比例! T- y/ X  U* ^- E1 V
    : [: {. S* n  q" X
    没想到0声单词这么多
    ( @+ T) {5 X2 r我一直认为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
    2 \" M9 F  `. `" w- \* U. ~请教几个问题
    , x7 I2 G% g3 `0 j5 h1、新明解单词数较少,可否统计下超级大辞林?
    ' N1 p/ T3 Q, s; y9 z) s2、统计饼图,可否给出所占比例和数量。这样更 ...

    ' E( W8 q/ R0 ]" P我觉得统计超级大辞林没有必要。原因有以下几点:/ Z; e6 ?' a8 h
    1. 新明解已经收录了常用单词,这个统计是用来指导记忆声调的,对常用7万单词的统计我觉得真的已经足够了。3 D& a2 k5 q0 c7 h) q7 y9 I
    2. 要对超级大辞林进行数据清洗是非常麻烦的。其中的百科词条等,也不太常用。
    0 N, X7 H& _4 ^. p( E4 _3. 超级大辞林中的大量片假名词语(外来词等),其声调相比常用和语、汉语词汇,没有那么固定。如果将其纳入统计,我觉得并不具有代表性。
    " N4 y- A# ~$ N+ W) n3 f% V- ?4. 对于超级大辞林中古语的声调,我觉得统计了也没有什么代表性,我学现代日语就已经够呛了。
    % W. _. z$ N% }& e) n4 e+ X) \$ D; a$ q, h4 \
    学日语真心推荐新明解,你可能觉得它收词量小,但是它还告诉你词汇的用法,一些有用的信息等。
    & V0 }, e, B& W& `. F% E4 T" M2 ^% D$ E/ e# _
    这个EPWING版的新明解好像是通过别的格式转来的,里面有很多东西没转对,问题有点大,最好不要用。
  • TA的每日心情
    慵懒
    2021-11-14 17:58
  • 签到天数: 999 天

    [LV.10]以坛为家III

    发表于 2019-3-23 23:43:22 来自手机 | 显示全部楼层
    本帖最后由 kapan000 于 2019-3-24 00:01 编辑
    . k" S5 |) J/ h; c: S
    enjoy了哦 发表于 2019-3-23 23:12
    % U" Z+ ~, k% K我觉得统计超级大辞林没有必要。原因有以下几点:* F# s3 ]  j( {
    1. 新明解已经收录了常用单词,这个统计是用来指导记忆 ...
    * \) `' D7 ~, J% i) e; K- Q- A
    非常感谢。请问下,这个统计是全部单词?是否包含了片假名单词?
    . |. C$ K; z6 A0 x. Z4 g+ |1 y% M& S0 I2 o" B( c
    如果可以的话,能否再统计以下3个纬度& w, Z9 h3 B7 R2 `  @  @% N0 i
    这样就更细化,明白了3 X! M5 y- t3 P
    纯片假名
    , d- P* h4 t  U$ C有汉字的
    , b0 z/ B$ H  l. J3 t纯平假名的,即完全无汉字的
    ! G% v( d* j5 I0 E" ]
    " e' ~& D7 z7 q9 Q谢谢
    ! E/ Y$ o/ _) E3 W" D
    0 P& Q/ v9 _" s7 S" |8 B  z% v  M; `7 G3 S4 B
  • 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, 2025-5-8 12:30 , Processed in 0.026546 second(s), 24 queries .

    Powered by Discuz! X3.4

    © 2001-2023 Discuz! Team.

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