掌上百科 - PDAWIKI

 找回密码
 免费注册

QQ登录

只需一步,快速开始

查看: 2026|回复: 8

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

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

    [LV.10]以坛为家III

    发表于 2019-3-23 21:42:30 | 显示全部楼层 |阅读模式
    本帖最后由 enjoy了哦 于 2019-3-23 23:23 编辑 + I/ G# |! x6 Z7 \# e8 i: Y* d

    " @3 [( D/ F+ a$ y4 }' [( ~2 o通过调查日语单词中音调类型的比例,可以得出一些结论,方便记忆单词本身和其后续助词的音调。
    % U- g5 O4 h- g. ~2 M3 t
    : M" r; G) m- Q4 o- Y7 A原始数据:新明解国语辞典第5版(EPWING格式)5 @5 S8 Q2 {: T: ~5 P
    首先通过 EBDump 打开该EPWING格式词典的文件夹的 HONMON 文件,导出其中的“前方一致表記形見出し”部分,选择全部的1412个block。. O* F+ d5 q3 t' F, `6 u/ H. j

    ) }. n# e, u; f8 \" V9 Q; f. K+ G5 Q7 @, ?
    导出后,将该文件转码成 UTF-8 格式,并使用正则表达式替换部分内容,使其容易被后续分析处理。8 i9 d) ^; `3 R1 p3 \/ f# w; _

    3 K& U1 h$ b; r3 @8 o" D, H
    4 e1 b/ K% b5 w4 d! F! B为统计尾高型音调,需要知道每个单词的拍数。由于拗音占有两个字符,但只算一拍,为了方便统计,将其中的小的[ゃ][ゅ][ょ] 及对应的片假名(还有小的[ア][イ][ウ][エ][オ]等,外来词专用音节)去掉,即[きゃ][きゅ][きょ]中后面那个字符。这样一来,拍数就等于字符数了。3 [6 p- O7 o7 d. @9 |- G
    9 n5 E  E/ ?1 v
    最终的经过清洗的“干净”的数据如下所示,根据个人的习惯进行处理:9 M  H  y  _9 v1 ?4 ?+ I" Z
    ) S" U6 c* \! t8 A# N8 I) c, m. Y) t
    % J  E( j+ Z% f1 ?# M
    然后可以通过 Python 进行统计,一个单词可能有多个音调,但只统计第一个音调(稍微改动源码可以统计所有的音调)。这个代码可以用来明白大致的统计思路,后续还有写零碎的更改,并没有体现在这里面。
    " B( i& U  ?+ |) C
    1. #!/usr/bin/env        python
      * ~8 }" t5 H; J& d2 A6 A" ]
    2. #_*_        coding:utf-8        _*_/ V$ `4 H- s. @& H6 h
    3. ' }, ~) w. p: U/ v; s2 D$ B# h
    4. import sys,os# r9 ]( r  L8 \7 d0 `
    5. import numpy as np
      7 E( v# W' P, Z0 y. V6 ~
    6. ! t/ T" a# `6 C' ]$ ^! h
    7. # 带有音调标记的词汇数目
      7 p; _3 M% z$ Y6 N% t. d
    8. all_entry = 0* t8 J' f2 g! k7 w
    9.   Q- q1 F5 z) n: a* |6 S9 s
    10. # 平板型,[0]
      # r5 _2 `" b! \, @; k
    11. entry_0 = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]- i; e$ ~- ]/ N. ~6 \

    12. ; p; i6 S! M4 M! o0 w
    13. # 头高型,[1]0 S; H" G1 u+ g' ?4 v
    14. entry_1 = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
      7 Z0 x) l' O! R& C1 F6 N

    15. $ ?* U% ?% i6 l0 B, \" z
    16. # 尾高型,[x] = 拍数) b) E' ^+ E! B7 z. m7 r2 C
    17. entry_last_high = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]9 X2 D2 q) V/ A# Y

    18. 2 b. v( I  u/ Z, [
    19. # 中高型,[x] < 拍数
      0 ~4 D5 N$ a) o* g  c; b* u
    20. entry_middle = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
      0 v6 a, |5 e3 R* Y  X& f* O3 c

    21. ' J. i0 ]2 B7 V& |- k2 {& p
    22. file_name = sys.argv[1]3 ]* Z  H+ R7 A9 F' [3 @
    23. f = open(file_name,'rb')2 g& N9 S: z" h8 S: ^# l5 s, n( b* `
    24. for line in f:; {" }! |/ h0 t  v' Y. u) n7 f3 w6 E
    25.         line = line.replace(b"\r\n",b"")$ S3 }* {9 q4 ^6 j2 p! R
    26.         line = line.decode()
      ) n) b& w& w3 V( p7 Z
    27.         db = line.split(',')
      % y0 U) r! o7 k. b! ]/ x
    28.         word_len = len(db[0])+ O1 S4 f9 e6 h
    29.         if word_len < 16:
      8 u/ Z  J5 a- [7 R7 i
    30.                 all_entry = all_entry + 1
      4 Z+ k' q9 G! \
    31.                 for i in range(1,len(db)):  o" M% ^+ F& g! A/ |
    32.                         accent = db[i]9 C( M- I3 C6 k- H2 U7 b
    33.                         if accent.startswith('['):
      7 ~- \5 y6 j! V. C
    34.                                 integer = int(accent[1])
      ; S' g7 J: p0 n. f( e
    35.                                 if integer == 0:3 Z! k3 v3 V! {3 g0 V0 g) F+ [
    36.                                         entry_0[word_len] = entry_0[word_len] + 1" |# |) M7 q$ _" t; J& i
    37.                                 elif integer == 1:
      4 g2 ~+ i+ S3 Y( @) B
    38.                                         entry_1[word_len] = entry_1[word_len] + 13 r; h- c; O8 y* G( p- O! Q
    39.                                 elif integer == word_len:
      7 U% f+ I* g  g9 O) H! Y
    40.                                         entry_last_high[word_len] = entry_last_high[word_len] + 1
      3 G2 W4 G) M; j
    41.                                 else:. y/ d9 ?6 Z4 k8 U2 I" G
    42.                                         entry_middle[word_len] = entry_middle[word_len] + 1% W8 }% G, p# h4 ^: ]
    43.                                 break
      * h. |# r" }: o# y- k
    44.   D5 j. i& x1 {, F: f+ N2 q. Y
    45. print('[0]:')9 I  d: b7 l0 E. K& S# O+ `
    46. for i in range(1,len(entry_0)):
      4 ^% ?- ^( |* I1 ], E$ c5 [- c
    47.         print('%d' % (entry_0[i]))
      8 Q' h& D& M7 Z; w' o& g* [
    48. print('entries: %d' % np.sum(entry_0))5 P' X2 `0 L6 Y( T3 Q# h9 ]
    49. print('\n')
      6 C" ^$ w0 M9 M# q

    50. & h$ I9 p$ i. L/ r8 s4 T
    51. print('[1]:')7 F& ~$ n2 J2 p4 z  L% s# d) p
    52. for i in range(1,len(entry_1)):
      ) I5 V: M! F" E6 G: K( W- a% B
    53.         print('%d' % (entry_1[i]))
        @7 b0 L' V0 O$ m
    54. print('entries: %d' % np.sum(entry_1))
      ' l3 b# s; t) z% E0 u* {
    55. print('\n')
      ( y/ _% O3 y) h" q
    56. " [! p' P6 }0 ?9 X1 i1 \, F
    57. print('middle high:')
      8 m' A) b1 s* _; J
    58. for i in range(1,len(entry_middle)):1 n4 y: Y/ Q6 e1 |
    59.         print('%d' % (entry_middle[i]))
      / v5 i/ U: k8 R0 {& _, a
    60. print('entries: %d' % np.sum(entry_middle))1 q: }: t: U) u( B
    61. print('\n')/ J* |, ?! [7 X# o
    62. . \+ _3 n0 e% j' N- S" v
    63. print('last high:')
      ) j4 X3 k6 u8 O
    64. for i in range(1,len(entry_last_high)):
      9 Z  @! L3 i, b# P
    65.         print('%d' % (entry_last_high[i]))
      * o7 y! v1 t* I1 V& P  L
    66. print('entries: %d' % np.sum(entry_last_high))
      9 e! {0 A5 v0 S+ ~0 }% R
    67. print('\n')7 O( J9 @$ Q; R

    68. ) `8 t$ @' ~( N) }. i; B4 M8 X9 l
    69. print('all entries:')" }' @8 Y" v5 O. v- |
    70. print(all_entry); Y' I$ x! b4 Y

    71. ; L: L; W% A2 }1 Y2 C5 S6 O5 p6 @0 [
    72. f.close()
    复制代码
    ' D- H( ^: h$ p: A. q4 L* `
    1 u) d" y- Z  {- Y- E
    最后将 Python 输出结果进行数据可视化:
    8 f( v7 \+ N. `8 e# p
    3 w' Z8 q+ g: p$ k9 Z( u! X! W: ^' z2 \" U. ^) a( G2 g
    4 z/ Z  p9 V4 \1 H: T6 u  b
    - a) a. c" e7 W4 W0 u
    以及饼图:1 ~: c9 P+ @2 C. g
    - Q4 \3 \: M0 N( D4 X, i
    6 G% {' n. g3 N. S1 l9 d$ p) V6 N
    可以得出几个结论:/ e0 r& N1 N8 L2 y/ ~
    1. 尾高型的单词很少(约2%,大部分在2拍和3拍的单词上,2拍和3拍五五开,总共约1300个单词(在7万多个单词中)。0 D8 H3 B$ [* M! ?
    2. 头高型的单词次少(约17%),主要集中在3拍的单词上(约51%),2拍和4拍都约占20%左右。: \- ?& T2 @7 }  j7 n9 J3 x
    3. 日语中4拍的单词最多(约42%),并且相当一部分(约72%)是平板型。这和新标日中入门单元里,“声调和语调”部分中“声调”小节里的解说是一样的。
    7 Y' t, @9 ~2 ?0 q+ @4. 记忆平板型和尾高型的单词时,单词本身发音规律相同,都是前低后高,但后接的助词音调不同,不好记忆。但通过上述统计,可以这么做:(两拍以上)尾高型的单词单独记忆后续助词的音调,其后续助词的音调总是低的,而在一般情况下,一个单词(两拍以上)后接的助词的音调(高或低)和该单词的最后一拍是相同的。一拍的单词完全不符合这个“一般情况”,只需要记住这一拍本身是低还是高,再根据“一个单词中第一拍和第二拍音调必定不同”来确定助词音调。单词本身的音调则通过多听、多用以形成固定的记忆。
    ; f+ j1 [1 R  h4 u- Q4 m, S( B4 k  E7 Y8 _+ ]7 s5 O2 v

    , U' D) m# }; B; Q& R' J- i, f6 }2 m) H" g" [
    ! t. o6 Q  k) ]% o1 x) }

    + V! w, w1 L# [
    - B$ @/ @" c+ a# p6 B: K: K5 Q& P2 V$ c0 q

    本帖子中包含更多资源

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

    x

    评分

    2

    查看全部评分

    本帖被以下淘专辑推荐:

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

    [LV.10]以坛为家III

     楼主| 发表于 2019-3-24 07:52:11 | 显示全部楼层
    kriskr 发表于 2019-3-24 00:482 u+ X! Z$ I, \5 Q3 T. \
    想问下楼主ebdump导出后如何转码为utf8 为什么我转码后,是乱码,求赐教,是需要一些python改动吗 ...

    ' f" Z5 A3 O  v文本编辑我一般用 notepad++,开源又好用。其中的 Encoding 菜单中有个Convert to UTF-8,可以转码。
    - g" x) K* ?& X8 i+ N  y
    1 [! u" B0 y: t, A6 b& R. B2 G在正则表达式替换的过程中,做了如下处理:
    : G! C" B$ G- }+ C" Z1. 删除了多个单词组成的条目。这种条目分别对每一个组成单词都标注了音调。
    4 L2 _+ o, w" _/ D" i6 q& b2. 声调类型统计只统计0-9,10及以上不统计。
    % c5 A1 V( \  {) [5 O- G6 o3. 拍数在16拍及以上的不统计。) v: w5 N$ R% o2 M4 Y' q2 f
    以及一些细微的调整。* X( D# e% h& {. A6 W/ o
    % a/ @: |. S, |) j: F' R6 x
    因为各人处理的方法不同,你最终得出的统计结果可能和我不太一样。
  • TA的每日心情
    慵懒
    2021-11-14 17:58
  • 签到天数: 999 天

    [LV.10]以坛为家III

    发表于 2019-3-23 22:43:16 | 显示全部楼层
    本帖最后由 kapan000 于 2019-3-23 22:46 编辑
    * S1 V1 m. I" q2 K
    8 T0 r3 r. D2 [; c: [( t请教几个问题
    * p# b6 G; R. s- |; Y' S1、新明解单词数较少,可否统计下超级大辞林?
    7 R. w; R" o  Z5 ?2、统计饼图,可否给出所占比例和数量。这样更好看点。4 L9 ]' b( D8 X& ~8 _  S0 T
    3、可否给出统计的xls?我想再算下,10拍以内,各拍那个声调多一点及其比例0 d- ^2 ^5 e" I+ {5 \4 V% d
    . O* }* W! z; R9 I" y2 E. `
    没想到0声单词这么多
      X8 |9 L. r, m( C9 t0 i0 {我一直认为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* n- B+ g, ?1 ?
    请教几个问题
    ! ~! i5 o: I% P% r* c# ]* S" I1、新明解单词数较少,可否统计下超级大辞林?( d' C8 O- p+ N0 ^' X
    2、统计饼图,可否给出所占比例和数量。这样更 ...
    9 e9 j3 B/ F! P9 }3 \
    我觉得统计超级大辞林没有必要。原因有以下几点:0 m- d) m1 w/ u8 V8 ]9 Y
    1. 新明解已经收录了常用单词,这个统计是用来指导记忆声调的,对常用7万单词的统计我觉得真的已经足够了。3 H, s% A4 o. H+ t/ x" X
    2. 要对超级大辞林进行数据清洗是非常麻烦的。其中的百科词条等,也不太常用。! O  {. s+ |% l
    3. 超级大辞林中的大量片假名词语(外来词等),其声调相比常用和语、汉语词汇,没有那么固定。如果将其纳入统计,我觉得并不具有代表性。) h8 m  r/ K5 U+ J1 J- T
    4. 对于超级大辞林中古语的声调,我觉得统计了也没有什么代表性,我学现代日语就已经够呛了。, m4 F2 l2 |) u) x1 ]8 k
    ! l% f) r! G9 I0 I
    学日语真心推荐新明解,你可能觉得它收词量小,但是它还告诉你词汇的用法,一些有用的信息等。
    6 h5 h% `7 w" h1 G. j6 f  F. i! q" `  i' g# O& T
    这个EPWING版的新明解好像是通过别的格式转来的,里面有很多东西没转对,问题有点大,最好不要用。
  • TA的每日心情
    慵懒
    2021-11-14 17:58
  • 签到天数: 999 天

    [LV.10]以坛为家III

    发表于 2019-3-23 23:43:22 来自手机 | 显示全部楼层
    本帖最后由 kapan000 于 2019-3-24 00:01 编辑 5 u$ t- Y& g, j( x/ a: h* N
    enjoy了哦 发表于 2019-3-23 23:12
    0 |" l0 L: ^- s' m! x我觉得统计超级大辞林没有必要。原因有以下几点:
    1 x0 A( L  l" S5 g1. 新明解已经收录了常用单词,这个统计是用来指导记忆 ...

    6 ^9 W/ F" S" h: p& k. j. }非常感谢。请问下,这个统计是全部单词?是否包含了片假名单词?) z7 O- X% k3 \
    . g. C( l7 @8 `0 O
    如果可以的话,能否再统计以下3个纬度" b! _) {5 R4 Z' M
    这样就更细化,明白了
      D  d2 @/ {0 a2 K1 v纯片假名
    ( V- E0 `3 ~: l' ]  Q+ f有汉字的
    1 H4 u2 B' {/ J  T, h纯平假名的,即完全无汉字的( V4 l7 S0 v6 b/ f8 {9 x% k# P! {& Q
    + ]& h$ f4 I8 M! C$ ]) _' g; b  w
    谢谢6 Z0 C1 X  y+ D- |
    " g9 D0 ^. L+ E0 ^! d
    ' e1 a+ V, L. k+ ]6 {( W1 m
  • 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, 2024-5-9 17:43 , Processed in 0.066622 second(s), 13 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2023, Tencent Cloud.

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