掌上百科 - PDAWIKI

 找回密码
 免费注册

QQ登录

只需一步,快速开始

查看: 2003|回复: 8

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

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

    [LV.10]以坛为家III

    发表于 2019-3-23 21:42:30 | 显示全部楼层 |阅读模式
    本帖最后由 enjoy了哦 于 2019-3-23 23:23 编辑 : q- u! v4 _2 M7 F$ {+ d- ~1 W

    3 Q  a: f  |7 o# g% P通过调查日语单词中音调类型的比例,可以得出一些结论,方便记忆单词本身和其后续助词的音调。9 `) R3 s% `! B( W4 V% U0 e/ O0 S

    ) ^3 F" j0 |% b2 L# U原始数据:新明解国语辞典第5版(EPWING格式)8 m+ W. d" S( ]: z- t
    首先通过 EBDump 打开该EPWING格式词典的文件夹的 HONMON 文件,导出其中的“前方一致表記形見出し”部分,选择全部的1412个block。# X  d( M! j" ]: U" E! z; H9 \( w
    $ R  v' a* }* ]7 H& O# v

    / s4 H$ E$ ]- ?, U$ v/ X# z1 [- R/ a4 t& }导出后,将该文件转码成 UTF-8 格式,并使用正则表达式替换部分内容,使其容易被后续分析处理。1 M  H7 L( B# U- h: Y2 L

    + A( B4 Z3 E0 y+ H
    4 }- j" }: P% t* ?为统计尾高型音调,需要知道每个单词的拍数。由于拗音占有两个字符,但只算一拍,为了方便统计,将其中的小的[ゃ][ゅ][ょ] 及对应的片假名(还有小的[ア][イ][ウ][エ][オ]等,外来词专用音节)去掉,即[きゃ][きゅ][きょ]中后面那个字符。这样一来,拍数就等于字符数了。
    - Q$ }7 g. C0 o( O/ i% K! l5 ?9 A& w% B* a* [
    最终的经过清洗的“干净”的数据如下所示,根据个人的习惯进行处理:6 M2 w& m+ H4 F8 Y9 e: _
    & j( z8 L& a* b  n5 f% w: |

    0 T6 t) Z' L# q9 Y然后可以通过 Python 进行统计,一个单词可能有多个音调,但只统计第一个音调(稍微改动源码可以统计所有的音调)。这个代码可以用来明白大致的统计思路,后续还有写零碎的更改,并没有体现在这里面。
    ; s  q' @9 D6 M
    1. #!/usr/bin/env        python9 R8 `  Q8 y: w! z
    2. #_*_        coding:utf-8        _*_( e, P8 H9 H& n
    3. 5 d9 s/ R4 a5 v2 z2 }! O% `
    4. import sys,os# r2 A' E8 i8 I. L! J3 [! f
    5. import numpy as np0 o% l1 q' ?* t! @  c

    6. , ?  b: _, _# M' m/ t& Z
    7. # 带有音调标记的词汇数目
      + v" c) ]# M' M% }
    8. all_entry = 0
      $ [0 s( A7 I+ R4 _

    9. 0 y8 G& {1 V( m- s
    10. # 平板型,[0]
      * B3 Z2 c& ]. W2 x* f. G
    11. entry_0 = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
      3 j/ Q1 Y. z+ j. e5 w

    12. 9 z  Z2 p% X, F5 x) i4 U
    13. # 头高型,[1]
      3 j3 L; _9 i$ S  U1 z
    14. entry_1 = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
      : [' Z( t, h9 E1 X

    15. 7 h0 v6 q" v5 w0 v- o! y5 e
    16. # 尾高型,[x] = 拍数# f" s! ]8 a0 K1 r3 c2 S
    17. entry_last_high = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]2 e2 w/ C: S# V& R: V

    18. . d; b$ I8 d: F: R' Y) F/ `
    19. # 中高型,[x] < 拍数
      # s+ i6 K* K  p0 P; Q2 K# t' r% G0 R
    20. entry_middle = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]1 W' c, [+ P  P7 ]) u, H

    21. , c/ i8 Y2 f( c8 n; c7 N) H
    22. file_name = sys.argv[1]
      & W+ [4 _& ^8 ^' A, \7 W
    23. f = open(file_name,'rb')- c; J8 g1 j# ^' h5 X
    24. for line in f:& ?, h6 u4 V3 D& ~: J8 p. [0 ]7 T
    25.         line = line.replace(b"\r\n",b""): ?7 i5 ]- k8 ^9 n7 E( {! ]& U
    26.         line = line.decode()
      / P  {* m# H5 E  v3 E
    27.         db = line.split(',')+ ^8 t3 s  c( Q: j4 C( K
    28.         word_len = len(db[0])
      " @, F$ y% y! R: d6 b
    29.         if word_len < 16:
      1 C+ a+ ?9 G# s: }; U0 R
    30.                 all_entry = all_entry + 1
      . i% [  e. v) L9 |: u
    31.                 for i in range(1,len(db)):% O% _+ b. ?" k6 f' ]8 U) V: C
    32.                         accent = db[i]
      + d8 J1 W6 J' L$ V) q1 j
    33.                         if accent.startswith('['):
      7 O: ~; w0 `" P" P& ~
    34.                                 integer = int(accent[1])# d$ u/ y+ S0 q- e2 t' P/ q
    35.                                 if integer == 0:
      ! c; {! E) v' I6 k
    36.                                         entry_0[word_len] = entry_0[word_len] + 1
      $ {$ ]; b0 t% x7 Q" ?
    37.                                 elif integer == 1:
      $ Y. o0 T# e+ T1 G3 I- N0 K+ s: s
    38.                                         entry_1[word_len] = entry_1[word_len] + 1
      . y; D* o9 Q8 c6 P  U
    39.                                 elif integer == word_len:3 H! h0 \3 @$ I
    40.                                         entry_last_high[word_len] = entry_last_high[word_len] + 1
      / E: c* Y/ a4 U8 I  ?: q
    41.                                 else:. v* y; \3 d3 a  S( n
    42.                                         entry_middle[word_len] = entry_middle[word_len] + 1! c2 e& |. i+ ?: |3 d
    43.                                 break
      + c& g, k/ e5 v! C8 p* q1 X
    44. $ p! O" x, f* D1 @5 l; s9 K
    45. print('[0]:')
      2 l* C! l7 _& d9 g
    46. for i in range(1,len(entry_0)):" k" t6 M$ p. I; y2 e
    47.         print('%d' % (entry_0[i]))% H+ w- I) M/ a5 A3 h4 z9 c" M
    48. print('entries: %d' % np.sum(entry_0))& q* D- W0 t& M/ m4 e# Q
    49. print('\n')
      ) Y% c$ }1 E7 Y

    50. / ?# w/ o1 T" ?$ N1 Z$ ~
    51. print('[1]:')6 ^0 w: [) F3 ^" h
    52. for i in range(1,len(entry_1)):2 `( o% a( l3 X' ]0 X) [& D
    53.         print('%d' % (entry_1[i]))
      # s' _" [2 c; A+ Z( p1 Y* O; j
    54. print('entries: %d' % np.sum(entry_1))
      / e8 H' h  q& b6 v6 J- w! \+ \
    55. print('\n')! b- @; N5 Q$ {* P0 Z9 l, F

    56.   l, e* X, t* X+ D) }
    57. print('middle high:')# D/ z  U; I7 _3 O# s
    58. for i in range(1,len(entry_middle)):
      0 M+ c- s* C2 E, [, y3 j
    59.         print('%d' % (entry_middle[i]))
      / X* }# O, X% D& h" c) \
    60. print('entries: %d' % np.sum(entry_middle))
      1 S" \/ w1 R/ J
    61. print('\n')
      - {& w0 @  b$ r- H3 \& b0 _
    62. * _2 J% O3 F/ b" i
    63. print('last high:')
      0 I- g9 p: y* D; R
    64. for i in range(1,len(entry_last_high)):8 n8 H  U; p/ ]* A2 I+ z" L
    65.         print('%d' % (entry_last_high[i]))
      6 z0 ]- [( o* R3 w# ^) u0 z
    66. print('entries: %d' % np.sum(entry_last_high)). o# ?/ ?$ I2 k' h: {
    67. print('\n')
      ; N0 ^4 E1 J& M1 U
    68. ( b/ U3 c% ^( o0 H8 A0 M+ |6 K
    69. print('all entries:')! V1 y0 ~2 t4 n1 Z' t/ j8 z7 F" A
    70. print(all_entry)
      2 d5 m6 T" m# R' u& D5 s; ^
    71. 4 K/ J8 q' F% _0 _& a9 T6 V
    72. f.close()
    复制代码

    % B: a: Z, Z( `& @
    8 u# P! @# Q8 R- s最后将 Python 输出结果进行数据可视化:. B- Z$ n0 Q6 [( l' x% e* p
    ( K% H, j0 y6 a" M& t2 A

    ( l* q: X' Q0 ^4 r
    " F% @' p+ F! p- x0 l
      @3 X% d- q) q- v) _以及饼图:
    " o$ P8 k& e$ m8 N
    6 r9 Z0 z2 g' |- T' G4 S+ p+ y# @" [7 d; h2 R
    可以得出几个结论:
    0 n- m  F+ K. |: B1 Y1. 尾高型的单词很少(约2%,大部分在2拍和3拍的单词上,2拍和3拍五五开,总共约1300个单词(在7万多个单词中)。! {. R, |: }5 O& j( [" ?3 L
    2. 头高型的单词次少(约17%),主要集中在3拍的单词上(约51%),2拍和4拍都约占20%左右。
    , p% I" a$ r3 I( Y1 S0 _3. 日语中4拍的单词最多(约42%),并且相当一部分(约72%)是平板型。这和新标日中入门单元里,“声调和语调”部分中“声调”小节里的解说是一样的。$ K7 g6 f+ M1 X. |3 n4 O" G
    4. 记忆平板型和尾高型的单词时,单词本身发音规律相同,都是前低后高,但后接的助词音调不同,不好记忆。但通过上述统计,可以这么做:(两拍以上)尾高型的单词单独记忆后续助词的音调,其后续助词的音调总是低的,而在一般情况下,一个单词(两拍以上)后接的助词的音调(高或低)和该单词的最后一拍是相同的。一拍的单词完全不符合这个“一般情况”,只需要记住这一拍本身是低还是高,再根据“一个单词中第一拍和第二拍音调必定不同”来确定助词音调。单词本身的音调则通过多听、多用以形成固定的记忆。
    ! G5 U& g' s) `6 s8 ^5 S: |8 \, U7 x. ?
    ! G) S- p$ g( e& E0 W5 k+ \

    + j% g- b7 \/ _
    " m0 G$ v% R5 Y! |$ C1 k8 W1 V5 G4 X4 X6 y5 J
    2 q( n$ o. c* x. g/ A9 Y% y+ C
    8 L6 d5 X* a0 B4 x

    本帖子中包含更多资源

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

    x

    评分

    2

    查看全部评分

    本帖被以下淘专辑推荐:

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

    [LV.10]以坛为家III

     楼主| 发表于 2019-3-24 07:52:11 | 显示全部楼层
    kriskr 发表于 2019-3-24 00:48
    , @( N5 M- m; H; F6 p想问下楼主ebdump导出后如何转码为utf8 为什么我转码后,是乱码,求赐教,是需要一些python改动吗 ...
    # m" c  ^) h$ O; L- n: e
    文本编辑我一般用 notepad++,开源又好用。其中的 Encoding 菜单中有个Convert to UTF-8,可以转码。4 l; l2 s/ p8 u3 P
    - h+ A& G( c9 K' i- Q, J
    在正则表达式替换的过程中,做了如下处理:
    ( h1 K% l6 E, x& A- O; |7 `1. 删除了多个单词组成的条目。这种条目分别对每一个组成单词都标注了音调。% v& @2 ~* J0 I
    2. 声调类型统计只统计0-9,10及以上不统计。! |7 [5 W& @4 [
    3. 拍数在16拍及以上的不统计。
    0 |# C" g5 ^( v  z" Y以及一些细微的调整。6 }. g0 }& ]4 n: X9 f; q3 R* S
    . B3 w8 {2 V% M' I8 G5 h- _3 @! E
    因为各人处理的方法不同,你最终得出的统计结果可能和我不太一样。
  • TA的每日心情
    慵懒
    2021-11-14 17:58
  • 签到天数: 999 天

    [LV.10]以坛为家III

    发表于 2019-3-23 22:43:16 | 显示全部楼层
    本帖最后由 kapan000 于 2019-3-23 22:46 编辑
    ; P! r% T$ v. k- I/ K* b4 Z. A: w9 W, S* c
    请教几个问题
    ; O6 N2 w. s2 I* H' t9 f1、新明解单词数较少,可否统计下超级大辞林?
    ; g, Y) ^, R; W+ |+ r2、统计饼图,可否给出所占比例和数量。这样更好看点。/ a( k* P% v9 C# v
    3、可否给出统计的xls?我想再算下,10拍以内,各拍那个声调多一点及其比例0 j0 |. l  o' z- i, v! t
    ' f* @9 m" ^# @
    没想到0声单词这么多* A: s: w, |4 Z. F% ~% t
    我一直认为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! E4 ?3 J2 L1 ^2 @
    请教几个问题0 c! q6 c6 G. H! _- G. h' r
    1、新明解单词数较少,可否统计下超级大辞林?
    9 ^2 |! U0 T: ^2、统计饼图,可否给出所占比例和数量。这样更 ...
    / z) G+ `: E9 X( j) I) }
    我觉得统计超级大辞林没有必要。原因有以下几点:
    : A0 u  u) F4 o, e1 Y1. 新明解已经收录了常用单词,这个统计是用来指导记忆声调的,对常用7万单词的统计我觉得真的已经足够了。
    " u4 Z6 C! h6 E/ l+ I1 A2. 要对超级大辞林进行数据清洗是非常麻烦的。其中的百科词条等,也不太常用。- ]* E# l8 N/ w% h2 w/ F
    3. 超级大辞林中的大量片假名词语(外来词等),其声调相比常用和语、汉语词汇,没有那么固定。如果将其纳入统计,我觉得并不具有代表性。
    , g" O+ ~5 l% @; f6 D" u; Y4. 对于超级大辞林中古语的声调,我觉得统计了也没有什么代表性,我学现代日语就已经够呛了。! d" F, U: g+ @( t. ?

    9 R, H% Y1 r1 g, F- i学日语真心推荐新明解,你可能觉得它收词量小,但是它还告诉你词汇的用法,一些有用的信息等。
    - n! h, A# P4 m
      o5 G/ S+ Q& F" }这个EPWING版的新明解好像是通过别的格式转来的,里面有很多东西没转对,问题有点大,最好不要用。
  • TA的每日心情
    慵懒
    2021-11-14 17:58
  • 签到天数: 999 天

    [LV.10]以坛为家III

    发表于 2019-3-23 23:43:22 来自手机 | 显示全部楼层
    本帖最后由 kapan000 于 2019-3-24 00:01 编辑 , d: [- _9 ^. d8 B5 U
    enjoy了哦 发表于 2019-3-23 23:12
    * p4 V9 N" I# k6 ^; ?9 [5 u4 j我觉得统计超级大辞林没有必要。原因有以下几点:" q% s# f) D7 ]* \8 f
    1. 新明解已经收录了常用单词,这个统计是用来指导记忆 ...

    ( x# C) R! _! k- T- Z5 D非常感谢。请问下,这个统计是全部单词?是否包含了片假名单词?9 T5 V8 M* U; E7 m6 Q' C
    ' e. q0 N6 E" u- O
    如果可以的话,能否再统计以下3个纬度
    : v' d  c' p% C$ N9 K这样就更细化,明白了1 {% L. z& \3 v0 R
    纯片假名2 A/ u! V* K( [1 o+ T) L9 w$ R
    有汉字的  S0 k. ~8 X0 u, l8 ?) R+ c
    纯平假名的,即完全无汉字的: _& }! v: h5 G$ W6 `
    % p( x* }* L, j
    谢谢
    * @6 V, C$ i% O% C2 ]. C: O7 j. X# y# F* }' @# D+ R' ]
    5 \( z5 e& C3 E7 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, 2024-4-27 17:08 , Processed in 0.048047 second(s), 10 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2023, Tencent Cloud.

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