掌上百科 - PDAWIKI

 找回密码
 免费注册

QQ登录

只需一步,快速开始

查看: 3816|回复: 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  u: g* j: N# H$ S# w9 Y: J
    8 H7 ^8 L0 ?" m# A( z# l通过调查日语单词中音调类型的比例,可以得出一些结论,方便记忆单词本身和其后续助词的音调。( {( S# P/ k  y, m% Q& t! W

    5 b/ V# g7 N1 f- v原始数据:新明解国语辞典第5版(EPWING格式)
    9 A( C1 e  q" p: ~首先通过 EBDump 打开该EPWING格式词典的文件夹的 HONMON 文件,导出其中的“前方一致表記形見出し”部分,选择全部的1412个block。7 ?$ i' I$ Z! N# N; B" k' E' E& {

    " o; r+ B1 J4 S3 u: d# N" j2 H6 x- k0 [/ y' k2 m
    导出后,将该文件转码成 UTF-8 格式,并使用正则表达式替换部分内容,使其容易被后续分析处理。, L9 V9 f4 G; q

    1 }2 E% ^! I; ^) Z5 ]
    . v2 t% b% _- G为统计尾高型音调,需要知道每个单词的拍数。由于拗音占有两个字符,但只算一拍,为了方便统计,将其中的小的[ゃ][ゅ][ょ] 及对应的片假名(还有小的[ア][イ][ウ][エ][オ]等,外来词专用音节)去掉,即[きゃ][きゅ][きょ]中后面那个字符。这样一来,拍数就等于字符数了。
    . l7 r+ f4 H; ^3 E/ I( K) C8 j$ Z& z# P) T2 u) n2 J/ Z
    最终的经过清洗的“干净”的数据如下所示,根据个人的习惯进行处理:
    * H3 S* S' \  q" l4 L* C
    4 {& N6 z, N/ w! }* u1 k9 k6 d* L  y( V1 \' D
    然后可以通过 Python 进行统计,一个单词可能有多个音调,但只统计第一个音调(稍微改动源码可以统计所有的音调)。这个代码可以用来明白大致的统计思路,后续还有写零碎的更改,并没有体现在这里面。; Y$ x5 p8 g! E, G
    1. #!/usr/bin/env        python
      8 v7 d3 T& d' T# ]
    2. #_*_        coding:utf-8        _*_4 C1 h3 C4 P1 p& u
    3. 8 W0 S. F" ^) V9 k
    4. import sys,os
      ( S  R6 W) b& u; h* ^8 \' _! O
    5. import numpy as np/ d4 x% W; ^' H; }

    6. * L7 N3 I7 r% {1 J+ x  S5 f
    7. # 带有音调标记的词汇数目. u& S1 @: W* E; E( p
    8. all_entry = 09 W2 n! l1 {; Y
    9. & ^- r% v1 v( f
    10. # 平板型,[0]
      $ L6 k2 t) p; W) y/ J* P- s
    11. entry_0 = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
        a9 K  u+ D: V$ R6 F; e. ?

    12. 9 k( B6 v2 ]: j: Y2 s
    13. # 头高型,[1]
      1 m2 I4 r- U+ g) \3 M
    14. entry_1 = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
      & [) ^9 B; W* s5 c4 t5 ^( {4 U- ~

    15. ; A) j2 w. g. o' Y, v" ~* p' H
    16. # 尾高型,[x] = 拍数
      ! D7 ]6 T; e- L6 N, J' i/ W
    17. entry_last_high = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]7 B% f7 A' H, R2 a9 M5 j
    18. ' _. R  U$ s( Y% Q
    19. # 中高型,[x] < 拍数5 d+ M0 k' d: @. p6 X7 V1 W5 b
    20. entry_middle = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
      : N  H0 n3 l) N3 W1 F  E
    21. , V" G; k+ {" }; Y7 z
    22. file_name = sys.argv[1]
      ! A6 D; ]9 \, U  P1 L/ x
    23. f = open(file_name,'rb')& m/ F" I: Y' r  t
    24. for line in f:
      4 O" v- J+ R2 h! e
    25.         line = line.replace(b"\r\n",b"")
      3 B: @; Z5 ]1 z" Q5 k
    26.         line = line.decode()
      3 H' u  o( S, h( y
    27.         db = line.split(',')
      5 g% @, ]6 Y% J7 v
    28.         word_len = len(db[0])4 ^% r( x9 C2 o( a. T" p6 S
    29.         if word_len < 16:
      1 F; o5 T, |& w+ t/ X( Z0 c
    30.                 all_entry = all_entry + 1( n7 E" T$ r1 F
    31.                 for i in range(1,len(db)):  a" {- p! n0 y* `
    32.                         accent = db[i]$ {6 S7 f- D# Z6 z
    33.                         if accent.startswith('['):: w5 v( S3 U2 N! J+ J
    34.                                 integer = int(accent[1])6 D% \" X1 c9 f' e
    35.                                 if integer == 0:
        t" @# e. a6 i
    36.                                         entry_0[word_len] = entry_0[word_len] + 1$ f! s! M8 u2 k$ ~8 d( J; ]+ _
    37.                                 elif integer == 1:
      # v9 I: A& r* c  Y: U8 c
    38.                                         entry_1[word_len] = entry_1[word_len] + 1: d  \; E# Z/ Z* L+ v+ x% E* }
    39.                                 elif integer == word_len:
      ; X2 d  E7 ]/ x: Y, P7 l
    40.                                         entry_last_high[word_len] = entry_last_high[word_len] + 1
      ( M% D/ j7 R$ S' N
    41.                                 else:& g4 ~  o$ [* g9 F$ z& k* b' H
    42.                                         entry_middle[word_len] = entry_middle[word_len] + 1
      - t/ r0 z8 ^& M2 u. d& C
    43.                                 break
      - F1 Z9 K/ I( A3 Q* c9 g7 x
    44. 9 B. P" X0 ]: d+ p7 Y
    45. print('[0]:')4 l' ~; g' @0 v# k" B
    46. for i in range(1,len(entry_0)):; I- ^' t) A# E3 e) K
    47.         print('%d' % (entry_0[i]))
      8 m* F3 m- _/ e6 U8 O7 n# h# P
    48. print('entries: %d' % np.sum(entry_0))6 B) \( X, z; E5 c. H. F
    49. print('\n'). @. [$ ~$ q$ H0 n& n9 V
    50. 1 {4 Z0 C. x4 m5 x
    51. print('[1]:')5 V! @6 C  `* A% g0 Q
    52. for i in range(1,len(entry_1)):
      $ I& m( y4 \( j9 f" y
    53.         print('%d' % (entry_1[i]))1 }8 G3 c7 Q. `7 m* ~) s  i' @
    54. print('entries: %d' % np.sum(entry_1))5 w- t8 Z5 z1 c0 v2 K+ n. g/ q
    55. print('\n')
      " S; Y5 r* w3 {3 P  G
    56. , u+ G1 j3 X9 ^
    57. print('middle high:'); ^5 _6 d1 o' d$ b% M  O
    58. for i in range(1,len(entry_middle)):# E* x3 `% c  @5 p+ T- }0 M
    59.         print('%d' % (entry_middle[i]))
      5 t: W8 Q: y) w9 `2 Q: I
    60. print('entries: %d' % np.sum(entry_middle))
      8 v2 t) \, J. f1 V7 X" ]
    61. print('\n')  i. _5 m' k2 A5 t
    62. 2 \6 q$ W: ?5 C' {. y
    63. print('last high:')6 ]$ C1 o9 g# `9 M# P
    64. for i in range(1,len(entry_last_high)):
      * K! q6 z  ~; q
    65.         print('%d' % (entry_last_high[i]))
      0 e8 N9 z4 s; P1 y$ p9 ~# S- y0 n. m
    66. print('entries: %d' % np.sum(entry_last_high))
      : C/ t8 ~% l" W
    67. print('\n')
      3 B- L7 X( G- |0 j
    68. 3 `. L' ~0 p: F$ x; C3 M
    69. print('all entries:')
      ' T4 Z# }5 t+ |9 H, s" A
    70. print(all_entry)0 U2 V6 O8 W3 O+ Q' q
    71. ! M- @: l! E; R' w
    72. f.close()
    复制代码
    ; V/ i. }1 J, ~  d: Q$ t* w7 [
    7 w& X' S- ^- q- ?5 B8 X
    最后将 Python 输出结果进行数据可视化:3 |6 R; X! a4 f: U* B& R
    ) ^: `5 w% v& I0 m( n6 M% R
    1 U  }. W8 j- O/ o

    1 G. K% ?& @% p# e( @, ]$ U
    / w4 a: l- z: N4 e以及饼图:
    + y5 R7 ~/ y9 a3 D/ a4 {! ]* D! E3 o0 K. h9 B* i# z/ N

    ; S& h; G: d& U- P2 D- R可以得出几个结论:
    , S3 t  _/ L; o* @1. 尾高型的单词很少(约2%,大部分在2拍和3拍的单词上,2拍和3拍五五开,总共约1300个单词(在7万多个单词中)。% \7 p( }( I7 h) d# k- X" n2 Z
    2. 头高型的单词次少(约17%),主要集中在3拍的单词上(约51%),2拍和4拍都约占20%左右。3 F4 Y  i" g* _1 F' W
    3. 日语中4拍的单词最多(约42%),并且相当一部分(约72%)是平板型。这和新标日中入门单元里,“声调和语调”部分中“声调”小节里的解说是一样的。# N. ~; `/ j1 c; {$ {6 E
    4. 记忆平板型和尾高型的单词时,单词本身发音规律相同,都是前低后高,但后接的助词音调不同,不好记忆。但通过上述统计,可以这么做:(两拍以上)尾高型的单词单独记忆后续助词的音调,其后续助词的音调总是低的,而在一般情况下,一个单词(两拍以上)后接的助词的音调(高或低)和该单词的最后一拍是相同的。一拍的单词完全不符合这个“一般情况”,只需要记住这一拍本身是低还是高,再根据“一个单词中第一拍和第二拍音调必定不同”来确定助词音调。单词本身的音调则通过多听、多用以形成固定的记忆。: S' P( \7 G  H3 f6 g$ m/ ?2 O7 _
    $ r* b6 ]# V" `! t+ j# `% e

    , P) P' Y: s2 @/ F  B7 x- C) M; a" {* ]7 u$ k
    5 G& d5 A0 O% I* r

    2 b/ U+ p4 {$ A" u. [( V2 G9 e" q4 D8 A6 U) y. Z  S" {
    * L8 N* N* R6 L/ x- I$ T8 k

    本帖子中包含更多资源

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

    x

    评分

    2

    查看全部评分

    本帖被以下淘专辑推荐:

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

    [LV.10]以坛为家III

     楼主| 发表于 2019-3-24 07:52:11 | 显示全部楼层
    kriskr 发表于 2019-3-24 00:48
    - \3 L# f- {6 X3 x( J# ?  M想问下楼主ebdump导出后如何转码为utf8 为什么我转码后,是乱码,求赐教,是需要一些python改动吗 ...
    * |% ^9 ], n$ o) ~
    文本编辑我一般用 notepad++,开源又好用。其中的 Encoding 菜单中有个Convert to UTF-8,可以转码。: k9 @4 o: y; e: m1 u* I, G  Y4 a
    " E; }& {' ?# G4 R* w
    在正则表达式替换的过程中,做了如下处理:
    " [$ T* w5 S; \1. 删除了多个单词组成的条目。这种条目分别对每一个组成单词都标注了音调。, c  L" N7 j: U0 G  B& N
    2. 声调类型统计只统计0-9,10及以上不统计。% Q* m* A1 }+ ]1 o  ?0 J  N/ }
    3. 拍数在16拍及以上的不统计。4 [" j$ P2 G. L/ O- R2 [1 Z
    以及一些细微的调整。* z% j  q, c, y8 V$ x

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

    [LV.10]以坛为家III

    发表于 2019-3-23 22:43:16 | 显示全部楼层
    本帖最后由 kapan000 于 2019-3-23 22:46 编辑
    ; Z# q6 T$ I6 O. O3 n8 J
    9 v! S4 {6 Y, _  Y0 y, F请教几个问题6 X$ ]: F+ b8 T. |, H* }
    1、新明解单词数较少,可否统计下超级大辞林?% w1 `9 m7 O& q: Y" g
    2、统计饼图,可否给出所占比例和数量。这样更好看点。' g: `. n# h" c0 }# Q8 N8 h
    3、可否给出统计的xls?我想再算下,10拍以内,各拍那个声调多一点及其比例
    , L7 r( [% ~) X+ X
    ( g/ g1 ~# g! C0 }! P5 {9 r5 [/ T没想到0声单词这么多
    & s" U; p! Q/ 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:439 J; l5 p  i6 n+ T5 ]
    请教几个问题. t: l! {3 [# y3 y" n+ V2 z
    1、新明解单词数较少,可否统计下超级大辞林?) g: A! D8 v$ ~  @
    2、统计饼图,可否给出所占比例和数量。这样更 ...
    ( A0 W2 W/ C& K1 \/ T
    我觉得统计超级大辞林没有必要。原因有以下几点:
    * d$ H" z1 V) t/ g! }' C4 K1. 新明解已经收录了常用单词,这个统计是用来指导记忆声调的,对常用7万单词的统计我觉得真的已经足够了。
    2 Q8 H- \& S4 c2. 要对超级大辞林进行数据清洗是非常麻烦的。其中的百科词条等,也不太常用。
    0 ]% e: Z, E+ \9 g3. 超级大辞林中的大量片假名词语(外来词等),其声调相比常用和语、汉语词汇,没有那么固定。如果将其纳入统计,我觉得并不具有代表性。- m% ]$ E0 u2 C; \& j" ~7 c
    4. 对于超级大辞林中古语的声调,我觉得统计了也没有什么代表性,我学现代日语就已经够呛了。
    8 I$ T8 L) o, {5 N) H5 m) }6 R2 K
    学日语真心推荐新明解,你可能觉得它收词量小,但是它还告诉你词汇的用法,一些有用的信息等。6 Y( m  R1 s2 Z* f

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

    [LV.10]以坛为家III

    发表于 2019-3-23 23:43:22 来自手机 | 显示全部楼层
    本帖最后由 kapan000 于 2019-3-24 00:01 编辑
    8 C' b5 i1 Y9 t- g
    enjoy了哦 发表于 2019-3-23 23:12
    7 @1 T3 d6 |: Q我觉得统计超级大辞林没有必要。原因有以下几点:% \& ]1 b" Z: {! S  L! P# R( X8 W
    1. 新明解已经收录了常用单词,这个统计是用来指导记忆 ...

    4 T8 q3 t% J% _4 N( }1 q非常感谢。请问下,这个统计是全部单词?是否包含了片假名单词?
    ; J# ?& I/ a% B" m7 {
    $ C0 ^8 Q. u+ f7 W) C如果可以的话,能否再统计以下3个纬度
    7 K  h/ [! `0 p( S- F; U. S" y8 ^这样就更细化,明白了
      S3 v3 `" _" H* a% T+ Q0 p+ A纯片假名9 @' u: |, F3 U  O( C0 l# U) }
    有汉字的
    % x5 Q- k. T: [纯平假名的,即完全无汉字的6 y0 ^4 R3 K  G: f1 D9 W1 x
    1 ^8 Q4 d- d+ B7 T$ u3 M
    谢谢2 C' C: J  f  T7 ?# I6 F
    + Z# j( F2 p$ K/ ^% {  M1 [$ Y

    7 a' i# h/ z9 x- F
  • 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-6-9 14:35 , Processed in 0.023003 second(s), 24 queries .

    Powered by Discuz! X3.4

    © 2001-2023 Discuz! Team.

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