掌上百科 - PDAWIKI

 找回密码
 免费注册

QQ登录

只需一步,快速开始

查看: 3075|回复: 8

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

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

    [LV.10]以坛为家III

    发表于 2019-3-23 21:42:30 | 显示全部楼层 |阅读模式
    本帖最后由 enjoy了哦 于 2019-3-23 23:23 编辑 0 Y! m2 S$ c" f4 G3 i& j) n& ~
    0 t4 T, k- a+ B' i) [! \. u
    通过调查日语单词中音调类型的比例,可以得出一些结论,方便记忆单词本身和其后续助词的音调。. ~% i, T1 G3 H4 c  i1 ~
    2 D, N- G# t; B- M) P  n  \
    原始数据:新明解国语辞典第5版(EPWING格式)$ f: \% I: ~" V0 @* G
    首先通过 EBDump 打开该EPWING格式词典的文件夹的 HONMON 文件,导出其中的“前方一致表記形見出し”部分,选择全部的1412个block。; A4 Z) O) `9 F5 u7 S8 b5 }

    6 s* C' @. v) J) k
    : ^. I' w2 E8 E# n& O" y! H( ]  y导出后,将该文件转码成 UTF-8 格式,并使用正则表达式替换部分内容,使其容易被后续分析处理。( d8 g* @% J# L1 B& l

    - e6 ?% ]8 D# N
    3 G  F5 U# q" |- r/ \1 m; ]9 U8 z- I为统计尾高型音调,需要知道每个单词的拍数。由于拗音占有两个字符,但只算一拍,为了方便统计,将其中的小的[ゃ][ゅ][ょ] 及对应的片假名(还有小的[ア][イ][ウ][エ][オ]等,外来词专用音节)去掉,即[きゃ][きゅ][きょ]中后面那个字符。这样一来,拍数就等于字符数了。7 Y! F1 @8 R1 ?+ X" F3 W3 \
    ; B- k0 r4 a: `4 C6 r. U2 ~
    最终的经过清洗的“干净”的数据如下所示,根据个人的习惯进行处理:
    6 Z& Q5 R, |( X7 x7 {3 k0 l- s
    $ h: {$ x6 M& ~: f6 l
    . M7 u" R. g- x- A" v6 h然后可以通过 Python 进行统计,一个单词可能有多个音调,但只统计第一个音调(稍微改动源码可以统计所有的音调)。这个代码可以用来明白大致的统计思路,后续还有写零碎的更改,并没有体现在这里面。
    5 B' f3 G  S2 y9 P3 k/ E5 Y
    1. #!/usr/bin/env        python
      % b( }) b& |3 i0 \
    2. #_*_        coding:utf-8        _*_9 k6 {. V; P& D3 @
    3. * A1 S# [( C2 {5 n# N* V3 W9 a% z8 n
    4. import sys,os
      ! @2 b4 P0 G- ]. K) \
    5. import numpy as np4 s, [# @! T) U% A1 j6 Y
    6. 3 c# l* @0 N  m* r& B& `( W) u
    7. # 带有音调标记的词汇数目
      - Z( K* H7 i+ R: r4 F
    8. all_entry = 0
      & \, t' f/ _* \) i2 b2 Y# D* G4 n

    9. & L! V) [) B* A) P* h& F
    10. # 平板型,[0]
      ' x+ i& g; A3 X4 K
    11. entry_0 = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]9 \8 K9 J8 f- b7 t$ t' N2 c+ g
    12. 3 T- r) B( _) w
    13. # 头高型,[1]
      0 {. K2 b* b9 y3 W% {1 ^
    14. entry_1 = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]+ _5 {7 y5 s; F2 a6 e8 E  H
    15. ; y/ ]1 T, W5 w# C0 n! F' d
    16. # 尾高型,[x] = 拍数' Z- o: u5 G; L# M
    17. entry_last_high = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]7 Z: k( w  D, I" h! E
    18. $ D+ V0 m+ D- H# d
    19. # 中高型,[x] < 拍数
      # T: Z6 @) e; V: c3 p( a" ]
    20. entry_middle = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]8 T8 W3 l1 y; S' {& I( P' D
    21. " ~9 J  @4 _1 X0 K' ~; U$ k
    22. file_name = sys.argv[1]& `% {& ~' P4 R- s
    23. f = open(file_name,'rb')
      . l2 D1 f" p& d. C
    24. for line in f:
      " B# u2 p9 ^4 W5 a
    25.         line = line.replace(b"\r\n",b""): l+ y/ B( O& u
    26.         line = line.decode()
      * z# H" J, E  ^" h4 Z2 w
    27.         db = line.split(',')# F+ W- z) F* d) Z6 q6 p4 o% E
    28.         word_len = len(db[0])7 ]7 a+ w4 d! e/ z
    29.         if word_len < 16:
      ! `) b" X# L# [0 X9 C/ V; x
    30.                 all_entry = all_entry + 1" N6 q# F$ y3 x. g$ J2 W
    31.                 for i in range(1,len(db)):$ L+ x8 f- v) \* [& a: ~, A
    32.                         accent = db[i]
      + l3 Q( _) ^, O8 G/ N8 v
    33.                         if accent.startswith('['):" _/ ~2 M" y) v+ c
    34.                                 integer = int(accent[1])
      3 C5 |3 n/ e5 {
    35.                                 if integer == 0:8 s& e. O6 s1 j0 q
    36.                                         entry_0[word_len] = entry_0[word_len] + 1
      % ~8 t% M$ e2 [( |
    37.                                 elif integer == 1:1 g; d, l9 b$ n2 Y! }/ i/ q
    38.                                         entry_1[word_len] = entry_1[word_len] + 1! N# R3 M# F$ p& |# V! W% U
    39.                                 elif integer == word_len:
      - b( t1 A/ A2 d/ I9 ~, l- R! m" z$ H
    40.                                         entry_last_high[word_len] = entry_last_high[word_len] + 1
      6 `) ?( n! z) h/ \( {
    41.                                 else:. C1 a! `* J. W* d
    42.                                         entry_middle[word_len] = entry_middle[word_len] + 1
      % N+ S) n, u" v! M2 {$ z
    43.                                 break. O9 l% l8 {# s1 x- v
    44. 5 n$ t0 k1 l8 ^, \* b7 A  ]& U
    45. print('[0]:')
      # f" Y2 n, w9 S  F6 r. S2 Z9 {7 m
    46. for i in range(1,len(entry_0)):4 @0 M+ a/ C) Q5 S+ \% |
    47.         print('%d' % (entry_0[i]))* o! _  `4 u0 L- ]6 l' v& X! p
    48. print('entries: %d' % np.sum(entry_0))
      ; ?; m' i" V# i4 _) E' C9 Q
    49. print('\n')
        i! {7 {: V4 ]7 \4 }' n: |

    50. & N$ U% n, C, V' Z3 a
    51. print('[1]:')
      1 w! P. a5 a) S4 u6 n
    52. for i in range(1,len(entry_1)):, ~8 l5 |5 |% r, T8 l9 ^. a
    53.         print('%d' % (entry_1[i]))
      . \  X8 g2 }( M# M1 Z8 m6 j
    54. print('entries: %d' % np.sum(entry_1))
      & C* g; b: x3 j: U, J$ S- G
    55. print('\n'), g, `! N7 D( `2 B
    56. ! i% Q4 \- [' q6 |. o. }
    57. print('middle high:')# u) t. i/ \: u/ }
    58. for i in range(1,len(entry_middle)):; }* V9 R7 [7 J( F% e4 r. U' ?
    59.         print('%d' % (entry_middle[i]))( ]: B6 d/ U/ z2 b" ?5 t
    60. print('entries: %d' % np.sum(entry_middle))
      $ G( _1 `3 Q+ s
    61. print('\n')
      / v: u8 s& k% p' L+ Y6 Z  M7 X4 Y% m& g

    62. - ^* t# R- j2 A1 T/ R
    63. print('last high:')
      8 |* M; \/ q4 p. [1 W* R( h
    64. for i in range(1,len(entry_last_high)):) d, |9 _' M& R9 c5 f$ F
    65.         print('%d' % (entry_last_high[i]))5 w$ A, W1 f9 h7 y+ }
    66. print('entries: %d' % np.sum(entry_last_high))
      7 w4 w# G3 i( x
    67. print('\n')( c7 l. L! I9 i7 N$ X1 O

    68. 9 ~8 A) s& O7 p) P& P2 Q+ X: Q
    69. print('all entries:')
      5 c- G# w5 G& ?4 {! C2 y/ s; g
    70. print(all_entry)* c! Y0 |! @4 D! t" b5 W
    71. 6 l/ ?7 ?, K4 D# P" s0 q- }
    72. f.close()
    复制代码

    + \; R; ?5 {1 y+ ~& j
    - V1 b- Y# z/ V  |) Q) q最后将 Python 输出结果进行数据可视化:
    2 O$ ~. l1 C9 S" @
    , O4 z) |  _+ P5 M) h( t. c% N5 d: w7 o4 s
    ! i' Z5 Z0 n% e+ O) \- B$ V' c

    : O2 L1 b% `: J0 O0 L2 x! k9 u以及饼图:! Z7 l( ?: ~& Q' H) E
    1 }6 J6 y' C/ a
    2 ]( l0 ~+ I7 F+ a% J
    可以得出几个结论:1 w0 v+ V) s; v% o
    1. 尾高型的单词很少(约2%,大部分在2拍和3拍的单词上,2拍和3拍五五开,总共约1300个单词(在7万多个单词中)。% Y% B3 u0 r. ~( Y$ t7 o
    2. 头高型的单词次少(约17%),主要集中在3拍的单词上(约51%),2拍和4拍都约占20%左右。
    * \  Q+ k% o, Q( X4 ~3. 日语中4拍的单词最多(约42%),并且相当一部分(约72%)是平板型。这和新标日中入门单元里,“声调和语调”部分中“声调”小节里的解说是一样的。
    & q5 M' w: E  R3 h: w  ~4 K$ D2 Z( @4. 记忆平板型和尾高型的单词时,单词本身发音规律相同,都是前低后高,但后接的助词音调不同,不好记忆。但通过上述统计,可以这么做:(两拍以上)尾高型的单词单独记忆后续助词的音调,其后续助词的音调总是低的,而在一般情况下,一个单词(两拍以上)后接的助词的音调(高或低)和该单词的最后一拍是相同的。一拍的单词完全不符合这个“一般情况”,只需要记住这一拍本身是低还是高,再根据“一个单词中第一拍和第二拍音调必定不同”来确定助词音调。单词本身的音调则通过多听、多用以形成固定的记忆。. K6 z5 L' @4 I" w' W+ V
    8 J. F% ^1 L: {: b4 Z
    8 Z6 }8 M* F% f

    4 M5 ~, U7 h, l, x4 _; ]
    ' X+ F! `( J! j  z. q- E$ L5 N9 W# Q2 c
    2 G: D0 q- B- T$ A% x

    $ q6 A8 X2 a6 T# x7 ]* S  V

    本帖子中包含更多资源

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

    x

    评分

    2

    查看全部评分

    本帖被以下淘专辑推荐:

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

    [LV.10]以坛为家III

     楼主| 发表于 2019-3-24 07:52:11 | 显示全部楼层
    kriskr 发表于 2019-3-24 00:48
    0 j- U  ?# R+ i! r" q想问下楼主ebdump导出后如何转码为utf8 为什么我转码后,是乱码,求赐教,是需要一些python改动吗 ...
    6 d  h/ F# y. p: f
    文本编辑我一般用 notepad++,开源又好用。其中的 Encoding 菜单中有个Convert to UTF-8,可以转码。
    - q( w# U" z% H6 p6 w" h3 l. n% ]3 Q( \# F+ b4 e  q
    在正则表达式替换的过程中,做了如下处理:8 y9 b; R9 f. C& Q
    1. 删除了多个单词组成的条目。这种条目分别对每一个组成单词都标注了音调。% X* m$ {2 @/ X0 K) Z/ g
    2. 声调类型统计只统计0-9,10及以上不统计。
    , U4 D7 a" D% i. R4 W. D4 z3. 拍数在16拍及以上的不统计。
    ! S5 Y# {, [  R7 g- V以及一些细微的调整。. [* F2 C! h& U7 I+ z

    9 ?  \9 h% l  Z; w$ a' N& G& L因为各人处理的方法不同,你最终得出的统计结果可能和我不太一样。
  • TA的每日心情
    慵懒
    2021-11-14 17:58
  • 签到天数: 999 天

    [LV.10]以坛为家III

    发表于 2019-3-23 22:43:16 | 显示全部楼层
    本帖最后由 kapan000 于 2019-3-23 22:46 编辑
    " r, X* k5 T2 i- b7 e
    1 \/ t/ f3 ~7 T  z请教几个问题' K' `" k. {0 }; o" H2 b
    1、新明解单词数较少,可否统计下超级大辞林?
    & [6 @# F, R, K5 J( k/ h7 A2、统计饼图,可否给出所占比例和数量。这样更好看点。
    + k4 ?/ Z1 U' B. Z) l" g' c3、可否给出统计的xls?我想再算下,10拍以内,各拍那个声调多一点及其比例3 k! ~6 F' i2 `* G
    3 u, \# S1 Y; [
    没想到0声单词这么多
    & T* o0 a1 o. h我一直认为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
    . z% \. V* D% C- o请教几个问题
    , W2 M" U: z& u$ [2 v1 r1、新明解单词数较少,可否统计下超级大辞林?, d1 }% C0 B) t0 n5 A, V5 |
    2、统计饼图,可否给出所占比例和数量。这样更 ...
    5 s, K0 O0 l- g1 D& d2 {1 l. L
    我觉得统计超级大辞林没有必要。原因有以下几点:7 W* ?7 n% h/ \3 [, D( N- z
    1. 新明解已经收录了常用单词,这个统计是用来指导记忆声调的,对常用7万单词的统计我觉得真的已经足够了。! l& W5 Z; F9 s; y6 H
    2. 要对超级大辞林进行数据清洗是非常麻烦的。其中的百科词条等,也不太常用。
    # K3 E/ T$ r4 b1 h, }  F3. 超级大辞林中的大量片假名词语(外来词等),其声调相比常用和语、汉语词汇,没有那么固定。如果将其纳入统计,我觉得并不具有代表性。, P2 n+ H4 c/ X4 u+ e. `# e
    4. 对于超级大辞林中古语的声调,我觉得统计了也没有什么代表性,我学现代日语就已经够呛了。5 l9 V" Q) K5 O" Y" U

    0 l7 Q7 Z7 A2 K4 r7 S4 V$ B, X学日语真心推荐新明解,你可能觉得它收词量小,但是它还告诉你词汇的用法,一些有用的信息等。
    * v) {$ K+ U! t* a! b' v; N% N+ ^( e  v) r( H6 N; R
    这个EPWING版的新明解好像是通过别的格式转来的,里面有很多东西没转对,问题有点大,最好不要用。
  • TA的每日心情
    慵懒
    2021-11-14 17:58
  • 签到天数: 999 天

    [LV.10]以坛为家III

    发表于 2019-3-23 23:43:22 来自手机 | 显示全部楼层
    本帖最后由 kapan000 于 2019-3-24 00:01 编辑
    9 v( Y% o0 W" B5 O1 {# J& j1 Y
    enjoy了哦 发表于 2019-3-23 23:12
    1 z. O$ h! Y* G( P3 z3 ^我觉得统计超级大辞林没有必要。原因有以下几点:
    0 c, b# ?5 k# r7 u6 W+ H; w8 H1. 新明解已经收录了常用单词,这个统计是用来指导记忆 ...

    ' N8 Z: P/ [8 B  P( G非常感谢。请问下,这个统计是全部单词?是否包含了片假名单词?$ T5 b4 h% h( Y5 h8 ~% m/ Z( |
    6 G) p; n2 B/ a0 M6 ^; v* L
    如果可以的话,能否再统计以下3个纬度' \% k  u5 T/ x) e4 L( t
    这样就更细化,明白了% l' M% z' v6 u
    纯片假名
    $ v& {5 e  i& l% o有汉字的. ^) _! j+ v- q( F
    纯平假名的,即完全无汉字的, p2 t' Z9 H5 j7 Z$ U

    5 A5 P2 I- w5 V8 ^谢谢
    " }" S' |! H- o8 ^5 u
    ; j! I+ }  M, y' p0 z7 c2 V: U8 a5 p
    ! K9 }. V8 S2 }$ a$ o
  • 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-7-2 23:25 , Processed in 0.023740 second(s), 24 queries .

    Powered by Discuz! X3.4

    © 2001-2023 Discuz! Team.

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