掌上百科 - PDAWIKI

 找回密码
 免费注册

QQ登录

只需一步,快速开始

查看: 2044|回复: 8

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

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

    [LV.10]以坛为家III

    发表于 2019-3-23 21:42:30 | 显示全部楼层 |阅读模式
    本帖最后由 enjoy了哦 于 2019-3-23 23:23 编辑
      u/ ^& z# s7 n7 I7 A' ?, T/ a" T4 F6 Y9 s- w
    通过调查日语单词中音调类型的比例,可以得出一些结论,方便记忆单词本身和其后续助词的音调。
    6 G+ l4 X2 h/ f0 w
    & g4 P$ b; J( ]! b' w原始数据:新明解国语辞典第5版(EPWING格式): d+ C+ {! t7 b. a! B3 t) {' t
    首先通过 EBDump 打开该EPWING格式词典的文件夹的 HONMON 文件,导出其中的“前方一致表記形見出し”部分,选择全部的1412个block。  O# n, B/ H- K+ g  [
    3 r9 G1 o8 C3 t$ G. @

    1 s7 Y6 I) r; X导出后,将该文件转码成 UTF-8 格式,并使用正则表达式替换部分内容,使其容易被后续分析处理。
    * Y. h' e8 M+ M  X; x5 @
    , c2 k- W: \9 V
    # {% ^' m' V, m+ [5 O# E2 c为统计尾高型音调,需要知道每个单词的拍数。由于拗音占有两个字符,但只算一拍,为了方便统计,将其中的小的[ゃ][ゅ][ょ] 及对应的片假名(还有小的[ア][イ][ウ][エ][オ]等,外来词专用音节)去掉,即[きゃ][きゅ][きょ]中后面那个字符。这样一来,拍数就等于字符数了。9 O! `0 C& d; F; a7 h, n2 ^
    - [6 R6 `! e/ v! q" [
    最终的经过清洗的“干净”的数据如下所示,根据个人的习惯进行处理:: _8 D; ^+ ^5 U' c

    & N- x* h' \. ~# i7 [
    ; W: h+ E" n3 U8 t" N9 M然后可以通过 Python 进行统计,一个单词可能有多个音调,但只统计第一个音调(稍微改动源码可以统计所有的音调)。这个代码可以用来明白大致的统计思路,后续还有写零碎的更改,并没有体现在这里面。* r. B7 k' }5 d2 F& @
    1. #!/usr/bin/env        python1 [, w7 f  m9 q0 W
    2. #_*_        coding:utf-8        _*_
      6 }, W1 n0 {! J/ O1 {) t
    3. 3 t. s/ A6 ]9 y# D
    4. import sys,os
      + y( i0 g5 ^; \& v
    5. import numpy as np4 E% Y; m! N+ ]4 A) S8 T

    6. ) w* m  C  \2 h8 {
    7. # 带有音调标记的词汇数目$ n- r+ e! |+ @% K' p/ R& }
    8. all_entry = 09 @+ U3 ~. p- [2 H# @, k

    9. & g- Y) A! _0 x
    10. # 平板型,[0]
      4 E1 z  z1 M2 ]4 n) ^/ s
    11. entry_0 = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]# e0 T, u1 {+ @5 E
    12. : k* z" Q1 Z$ I
    13. # 头高型,[1]
      + ?' u+ t! h6 i. v% {9 t
    14. entry_1 = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
      4 J' k& L# v0 P$ u8 D2 x

    15. , a1 p7 T6 c5 ]& }+ \
    16. # 尾高型,[x] = 拍数
      3 U* ^/ T3 c. N6 r1 N7 t4 V( p. _9 ]5 k
    17. entry_last_high = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
      4 i5 X+ }3 r% S6 ^6 ~. @

    18. 5 _- b) y$ l) l, U, J; Z; l8 a$ ]
    19. # 中高型,[x] < 拍数
      ' ~  O) h6 ~# Z6 V: Q+ V1 G3 e9 ~
    20. entry_middle = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
        E; ?3 g& D9 _; s

    21. 9 C) A7 Z" W+ D3 X
    22. file_name = sys.argv[1]
      ! `) D3 \9 D' x: ~
    23. f = open(file_name,'rb')
      ' c0 J0 B2 m9 j( K" [# e4 ^# X& F) D
    24. for line in f:# P5 ^/ J. y) u. W0 n0 P
    25.         line = line.replace(b"\r\n",b"")
      " ^& K- h- \0 U' h9 N) j2 B8 B
    26.         line = line.decode()
      8 A, l' d) Y6 `  n9 _
    27.         db = line.split(',')
      8 I' i: z( A% u4 Z7 A) O8 Y8 Z
    28.         word_len = len(db[0])' {; W1 z* _( ?1 k% b$ b7 J/ b
    29.         if word_len < 16:
      ! C: H! V; q* n% y7 @
    30.                 all_entry = all_entry + 1
      , G1 X* F9 P% W) [: |0 f3 R& f
    31.                 for i in range(1,len(db)):4 G# Z9 w  q( {0 G
    32.                         accent = db[i], l2 n0 f! G/ o+ E- }2 ?+ Q' G
    33.                         if accent.startswith('['):
      ; l  L1 y$ }2 K& A- Z
    34.                                 integer = int(accent[1])$ Z6 Z: F) B7 [" f5 Y1 z
    35.                                 if integer == 0:
      % k: X+ c+ o; C" \! J
    36.                                         entry_0[word_len] = entry_0[word_len] + 1
      2 u) K. X. ?$ `  S1 E% y* P
    37.                                 elif integer == 1:
      # [" ]7 C. P4 T8 ~
    38.                                         entry_1[word_len] = entry_1[word_len] + 10 _- ^* _- l, r( _" W+ e0 ~' w  f5 b
    39.                                 elif integer == word_len:9 K; S8 r; F: T0 w# ^* g( [& D; Y
    40.                                         entry_last_high[word_len] = entry_last_high[word_len] + 1
      * l0 g! z. n3 T. M! c& {
    41.                                 else:
      % r" O. B7 ]0 b3 L8 ^5 Y
    42.                                         entry_middle[word_len] = entry_middle[word_len] + 1
      2 ]* ]8 I  i* n8 I! f
    43.                                 break
      9 t- c; p3 W& E& ?

    44. , {, ]$ }0 \3 C  c% R5 k$ t' o3 ^
    45. print('[0]:')% a  i9 ~/ v; m0 j3 r& Z
    46. for i in range(1,len(entry_0)):
      - I+ R/ s" e+ K& V0 K
    47.         print('%d' % (entry_0[i]))$ i0 B( o: O4 j2 ]. s4 v
    48. print('entries: %d' % np.sum(entry_0))
      * g) r" d: m. C) K# A7 x
    49. print('\n')5 |8 m! p' h5 ]9 _  r; ~% r: q
    50. + X0 K) r5 a; ~6 |
    51. print('[1]:')& [4 n7 P( j. c. j/ b
    52. for i in range(1,len(entry_1)):" I1 S- d0 m- L9 V" I% l
    53.         print('%d' % (entry_1[i]))7 Q5 d) \1 g% K4 z, Y
    54. print('entries: %d' % np.sum(entry_1))
      / w! c. H1 ?( G8 ~) D% b
    55. print('\n')
      ) B3 C0 M! h" e1 r: }6 Y: V
    56. 7 Z% z: _5 s3 X
    57. print('middle high:')
      ' x3 S  s  Z* o4 R+ M8 c+ j7 K
    58. for i in range(1,len(entry_middle)):
      5 g% ~( C2 f. N2 w7 k
    59.         print('%d' % (entry_middle[i]))
      ) `* |$ a. l7 f8 x
    60. print('entries: %d' % np.sum(entry_middle))6 }$ N+ G; ^% G- F" ?$ k
    61. print('\n')
      0 k& }5 V7 U. ^9 e
    62. , D( l  z9 s" w
    63. print('last high:')0 E! h8 v* }0 ?/ U2 \
    64. for i in range(1,len(entry_last_high)):
      % b$ p. J# J; I/ k
    65.         print('%d' % (entry_last_high[i]))8 Q! [  B% T/ l( [0 d  B
    66. print('entries: %d' % np.sum(entry_last_high))2 i# j" x; K8 ]3 b, L7 W
    67. print('\n')$ f% E+ q0 W# |6 C* a
    68. ' R7 ?9 O! C5 n. {( T1 q  f( v
    69. print('all entries:')
      . ^; I0 B$ I; O# b
    70. print(all_entry)
      * A9 ?7 V' \, O5 @1 m

    71. ' Y  v- }8 r! M4 s& J/ ~
    72. f.close()
    复制代码

    $ }; c* ~) h8 P/ F. }1 l
    / O/ s% [2 W5 y7 V# c+ q最后将 Python 输出结果进行数据可视化:
    1 z) M8 z8 X. g" m# s& I0 A( t/ ^! N7 y, A" h: F
    & _2 l0 x( m$ ?
    1 X$ p! o% `1 l, P! a: m
    2 j# @+ V0 Y3 e6 _
    以及饼图:
    ; n6 t- O3 [& v/ k
    3 O# S, ~/ d- u
    ; o0 C  O! X" t$ `可以得出几个结论:& K9 o' Z$ |" P; q6 y$ ~. K
    1. 尾高型的单词很少(约2%,大部分在2拍和3拍的单词上,2拍和3拍五五开,总共约1300个单词(在7万多个单词中)。5 z& _- @' b( d7 \' t
    2. 头高型的单词次少(约17%),主要集中在3拍的单词上(约51%),2拍和4拍都约占20%左右。7 q2 C. L5 |' ]3 w3 s( ^; Z
    3. 日语中4拍的单词最多(约42%),并且相当一部分(约72%)是平板型。这和新标日中入门单元里,“声调和语调”部分中“声调”小节里的解说是一样的。
    + P4 f/ p) t1 w) L! [4. 记忆平板型和尾高型的单词时,单词本身发音规律相同,都是前低后高,但后接的助词音调不同,不好记忆。但通过上述统计,可以这么做:(两拍以上)尾高型的单词单独记忆后续助词的音调,其后续助词的音调总是低的,而在一般情况下,一个单词(两拍以上)后接的助词的音调(高或低)和该单词的最后一拍是相同的。一拍的单词完全不符合这个“一般情况”,只需要记住这一拍本身是低还是高,再根据“一个单词中第一拍和第二拍音调必定不同”来确定助词音调。单词本身的音调则通过多听、多用以形成固定的记忆。+ O  `; L  C& x2 C( T+ j0 G+ A
    0 }+ |. J# l3 d# S# s7 O# P, V

    ' m3 Z. X6 {+ L& p: i0 {4 {! F/ t8 V" ]- o% Q

    ( i+ G) @3 p2 |, }& T6 G. t$ J0 f$ F2 n5 P
    4 R2 D' i- j8 o! p1 F: z; c
    # m5 @- O) L4 h$ }5 u: \

    本帖子中包含更多资源

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

    x

    评分

    2

    查看全部评分

    本帖被以下淘专辑推荐:

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

    [LV.10]以坛为家III

     楼主| 发表于 2019-3-24 07:52:11 | 显示全部楼层
    kriskr 发表于 2019-3-24 00:48
    1 ^8 n5 u$ {3 s! w7 f$ k想问下楼主ebdump导出后如何转码为utf8 为什么我转码后,是乱码,求赐教,是需要一些python改动吗 ...

    3 k" Q. O, o( C& }5 X4 t9 H文本编辑我一般用 notepad++,开源又好用。其中的 Encoding 菜单中有个Convert to UTF-8,可以转码。2 \! g3 ?. ]: P* X6 m; Y: `0 D7 d

    - ^  m% ?! c$ i" p5 Y) I3 d在正则表达式替换的过程中,做了如下处理:
    ; B3 Q8 ~2 y+ C7 X9 I0 B" W5 R" J1. 删除了多个单词组成的条目。这种条目分别对每一个组成单词都标注了音调。7 D" T. F  q) c4 f
    2. 声调类型统计只统计0-9,10及以上不统计。& V8 q& V7 C6 n. g. ]
    3. 拍数在16拍及以上的不统计。
    ) t4 Y% l0 p7 W1 B% {5 B# B0 P; q" X以及一些细微的调整。
    ' N0 @1 g& G* a5 e& _: G* V. o1 M" F' p4 n
    因为各人处理的方法不同,你最终得出的统计结果可能和我不太一样。
  • TA的每日心情
    慵懒
    2021-11-14 17:58
  • 签到天数: 999 天

    [LV.10]以坛为家III

    发表于 2019-3-23 22:43:16 | 显示全部楼层
    本帖最后由 kapan000 于 2019-3-23 22:46 编辑
    9 G) R% d$ [; d4 W. z4 F+ k% _5 y2 a( S3 R+ s
    请教几个问题
    . D; V: N( }1 m! ]1 a' @1、新明解单词数较少,可否统计下超级大辞林?
    2 ]6 o/ _0 f( p  v- V! p- l. H2、统计饼图,可否给出所占比例和数量。这样更好看点。
    - D9 v* A5 z5 ^9 D3、可否给出统计的xls?我想再算下,10拍以内,各拍那个声调多一点及其比例
    ; q, O' D% A, D; U7 @4 b9 t# ~" k$ _1 H/ c9 Q" j7 x
    没想到0声单词这么多
    $ V: S+ m2 E( q& |我一直认为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 d% T9 S! C4 u5 f; f请教几个问题& E5 \- \7 L1 X5 o
    1、新明解单词数较少,可否统计下超级大辞林?
    / a- {4 N' k- g2、统计饼图,可否给出所占比例和数量。这样更 ...
    1 ~/ ?& u' C: g- T) g7 }6 W6 @
    我觉得统计超级大辞林没有必要。原因有以下几点:
    - N1 J2 Z% z! V1. 新明解已经收录了常用单词,这个统计是用来指导记忆声调的,对常用7万单词的统计我觉得真的已经足够了。$ `: p# U# e, i: y7 F6 J+ S' O
    2. 要对超级大辞林进行数据清洗是非常麻烦的。其中的百科词条等,也不太常用。7 Z  C* v4 W* g+ E) H
    3. 超级大辞林中的大量片假名词语(外来词等),其声调相比常用和语、汉语词汇,没有那么固定。如果将其纳入统计,我觉得并不具有代表性。' ]+ V4 j# E3 {- R) x
    4. 对于超级大辞林中古语的声调,我觉得统计了也没有什么代表性,我学现代日语就已经够呛了。- j, \/ B1 J! |9 x
    " t" x) ]; w: Y6 Y( U: s$ K
    学日语真心推荐新明解,你可能觉得它收词量小,但是它还告诉你词汇的用法,一些有用的信息等。4 ^  u# U7 q  `% o5 h# Q

    & X  N! s$ u3 F8 H. j) h这个EPWING版的新明解好像是通过别的格式转来的,里面有很多东西没转对,问题有点大,最好不要用。
  • TA的每日心情
    慵懒
    2021-11-14 17:58
  • 签到天数: 999 天

    [LV.10]以坛为家III

    发表于 2019-3-23 23:43:22 来自手机 | 显示全部楼层
    本帖最后由 kapan000 于 2019-3-24 00:01 编辑
    3 H& Z* t4 n8 l$ F8 B4 ~3 y
    enjoy了哦 发表于 2019-3-23 23:129 a5 R( p' ^+ x+ V, T# r
    我觉得统计超级大辞林没有必要。原因有以下几点:
    ) P7 D# R) O3 d8 M8 `+ j1. 新明解已经收录了常用单词,这个统计是用来指导记忆 ...
    " k- J& a8 v) j9 i
    非常感谢。请问下,这个统计是全部单词?是否包含了片假名单词?8 k) F+ w7 l$ \' J$ e# X

    8 p3 G- B9 P9 O& i如果可以的话,能否再统计以下3个纬度$ y* s, j; d4 R) S8 _1 F1 P. V! Y
    这样就更细化,明白了
    0 f$ g( R. t2 |, R8 e& J纯片假名
    6 t4 \" Q" K% P有汉字的. `0 i  n+ N8 I' f9 y' V# Q, w
    纯平假名的,即完全无汉字的2 @# V& r8 z8 ~6 k7 v2 r. d
    1 S+ D# N3 s1 K7 p* C
    谢谢
    6 Y: d5 i% k4 y: r! e$ l( h* j6 a% N% h
    2 m2 u1 `$ y7 H0 {4 }
  • 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-17 19:56 , Processed in 0.051274 second(s), 11 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2023, Tencent Cloud.

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