掌上百科 - PDAWIKI

 找回密码
 免费注册

QQ登录

只需一步,快速开始

查看: 2684|回复: 8

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

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

    [LV.10]以坛为家III

    发表于 2019-3-23 21:42:30 | 显示全部楼层 |阅读模式
    本帖最后由 enjoy了哦 于 2019-3-23 23:23 编辑 % N0 {  J2 P' B/ ?" {8 ]

    ; V: n  T) d- o# O- }, U0 l3 P通过调查日语单词中音调类型的比例,可以得出一些结论,方便记忆单词本身和其后续助词的音调。
    3 r$ W& ^2 d# x9 z2 C) Q
    8 }9 g" k) U: g  [2 |" F6 k原始数据:新明解国语辞典第5版(EPWING格式)
    2 y3 ]& h3 ~/ @首先通过 EBDump 打开该EPWING格式词典的文件夹的 HONMON 文件,导出其中的“前方一致表記形見出し”部分,选择全部的1412个block。4 p0 h. L1 b+ N( I/ |3 D

    $ m; K! g2 E' F6 m5 W: |8 C8 p% t
    * k8 h0 f9 f( }6 ^! G" U导出后,将该文件转码成 UTF-8 格式,并使用正则表达式替换部分内容,使其容易被后续分析处理。
    # }$ O% M8 @5 j+ |  i. j
    % c& h' Q# o4 \; H( s% f& O# v% R; ^2 X/ W/ M
    为统计尾高型音调,需要知道每个单词的拍数。由于拗音占有两个字符,但只算一拍,为了方便统计,将其中的小的[ゃ][ゅ][ょ] 及对应的片假名(还有小的[ア][イ][ウ][エ][オ]等,外来词专用音节)去掉,即[きゃ][きゅ][きょ]中后面那个字符。这样一来,拍数就等于字符数了。& Y5 T) |1 g: O: R$ V- e8 I& f

    " n2 I, z* h1 s, R* G最终的经过清洗的“干净”的数据如下所示,根据个人的习惯进行处理:
    ! ^3 E' }7 ~# J6 N
    6 \" f9 J* \& z5 x& g6 I* H9 I0 o3 W- e6 r
    然后可以通过 Python 进行统计,一个单词可能有多个音调,但只统计第一个音调(稍微改动源码可以统计所有的音调)。这个代码可以用来明白大致的统计思路,后续还有写零碎的更改,并没有体现在这里面。
    9 h8 S3 y7 C& o2 _0 ]3 D6 o1 F
    1. #!/usr/bin/env        python
      + L# Y& Z8 _% ^
    2. #_*_        coding:utf-8        _*_
      $ i5 ~- \* e9 s9 o6 d& G9 e

    3. 3 V, f$ p! l1 B, o
    4. import sys,os! Y2 D9 F9 f/ ]& l: f
    5. import numpy as np
      5 ]/ Z0 d. k& O# \% f% ~1 T

    6. 0 r3 r) C8 y2 T8 N* l$ G- o
    7. # 带有音调标记的词汇数目
      * d! _3 q5 c9 A; t& V( X
    8. all_entry = 0, h. Y' t, }* k0 P" w) x" o

    9. 3 r; d/ _7 r- X$ B0 s7 d/ [/ B
    10. # 平板型,[0]
      ) L% O) ^- c1 D; H$ v
    11. entry_0 = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
      9 l8 g, q& H! `4 {; V( ?+ d
    12. ) m  h' S: d: I  s. r8 J& a
    13. # 头高型,[1]) M0 d( L2 d7 w2 O- I
    14. entry_1 = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
      - I/ n& {$ A5 h

    15. 0 Q; C0 f  ~1 v9 N4 `
    16. # 尾高型,[x] = 拍数
      - S$ Z  s$ A, [) T/ f" X
    17. entry_last_high = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]3 Z' m, M, N) a8 X5 g; [

    18. . \6 I/ B- @6 q! m! ^) E& X% Y6 m
    19. # 中高型,[x] < 拍数0 _- {1 \2 V/ R; A
    20. entry_middle = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
        H; O/ w$ g; S+ l
    21. 3 [. `# X# D9 R: p+ S
    22. file_name = sys.argv[1]/ Y. V, P% r1 S& m: L. o
    23. f = open(file_name,'rb')
      7 P5 M$ F# u2 F5 @4 G
    24. for line in f:
      ! F) H- h; F2 M. F4 k! D
    25.         line = line.replace(b"\r\n",b"")( @+ N5 d) m7 Z9 a) P
    26.         line = line.decode()+ @5 J0 S# h; C! `1 L
    27.         db = line.split(',')9 U4 M* J1 J0 {4 x/ }
    28.         word_len = len(db[0]); p& w7 K) D" \- _
    29.         if word_len < 16:7 g2 k8 x3 W. f1 g  x" D
    30.                 all_entry = all_entry + 1
      7 @- k7 ~' Y' H- U, ^/ u. z
    31.                 for i in range(1,len(db)):, V) K( V+ ~9 ?( a3 h- ?- ?
    32.                         accent = db[i]. H, {2 [; o6 w8 Y* \; f
    33.                         if accent.startswith('['):
      $ W0 o4 |7 p& s5 c3 Y) j
    34.                                 integer = int(accent[1])6 q7 c& j  `7 c* o- K
    35.                                 if integer == 0:
      8 J, P" [6 r7 O2 D5 D
    36.                                         entry_0[word_len] = entry_0[word_len] + 1. S' i: U( E6 R' v2 _! [# B* e; R
    37.                                 elif integer == 1:+ J: ~$ x5 G2 @, K
    38.                                         entry_1[word_len] = entry_1[word_len] + 1+ X& h& I" ^# |
    39.                                 elif integer == word_len:
      # \4 ]1 A' p* P. x+ q0 |" Y' {& a; A9 D& G
    40.                                         entry_last_high[word_len] = entry_last_high[word_len] + 1/ Z6 |; l; k" s! t
    41.                                 else:
      " Z# {5 w, Z$ V( \( r* L
    42.                                         entry_middle[word_len] = entry_middle[word_len] + 1
      ; \( u' T. l  R8 E7 a& T
    43.                                 break
        C" D' x: m% Z+ r8 I3 `; ^) b; y
    44. ' @1 b1 i7 t, Y4 k
    45. print('[0]:')8 S) P1 Y3 Z3 ?! r" z1 u# M
    46. for i in range(1,len(entry_0)):/ m6 `( R3 F& J1 s4 x0 o) b
    47.         print('%d' % (entry_0[i]))
      2 i  Z) W3 ], j3 h4 g4 Q
    48. print('entries: %d' % np.sum(entry_0))% Q3 V$ e: n# }2 q$ O
    49. print('\n')
      + N6 |+ N5 W& i
    50. 5 f1 M( A/ n& b3 ], o+ u& k
    51. print('[1]:')
      & Q8 W( z; c. d# b- i* @9 i
    52. for i in range(1,len(entry_1)):0 j8 s' M3 N" W0 {2 H
    53.         print('%d' % (entry_1[i]))
      * X& h. K: Z) K; A5 [
    54. print('entries: %d' % np.sum(entry_1))$ |4 s* k, X7 O/ y
    55. print('\n')( Z5 i4 O# t0 E5 [3 x, J
    56. 5 x# h. c) o& ^, |. n
    57. print('middle high:')
      ; R, h3 \5 F/ \: S' {4 N
    58. for i in range(1,len(entry_middle)):
      4 Y3 ?8 C, |1 l; N3 h9 a) p- R
    59.         print('%d' % (entry_middle[i]))' ]7 V( n# |2 \. P2 }  d
    60. print('entries: %d' % np.sum(entry_middle))
      ! f1 D: j" D0 O# b" a
    61. print('\n')
      1 G  Q  [; a. Y$ N: j" a

    62. $ d4 g, X& r: H
    63. print('last high:')
      " J: o8 ?: y- K  T0 d& ?
    64. for i in range(1,len(entry_last_high)):
      # d, P, `3 Q# W9 q3 S- Q2 Z6 z% o
    65.         print('%d' % (entry_last_high[i]))- t* ]2 O8 B  h7 V) O  Q
    66. print('entries: %d' % np.sum(entry_last_high))+ `; E: c( i7 j8 o
    67. print('\n')3 j3 k" v8 a5 u' m
    68. : \6 o& I" S, f3 F9 ~  m
    69. print('all entries:')( }/ X. L) w, s5 i# M4 U
    70. print(all_entry)
      + a) P5 R9 h0 K5 p+ ]9 t6 \' w
    71.   J1 W, V; c( Q6 q/ a
    72. f.close()
    复制代码
    / _% }* I9 s' z  d6 \
    5 V2 I+ i+ m2 A6 W
    最后将 Python 输出结果进行数据可视化:% i: Z/ @- ?8 ^- |! e  _

    $ ^6 f# I( |5 S% H/ |0 a: x& d( c/ [
    ! G4 a& q& b/ {& N+ |  ?# u  {, |) z

    1 B3 ?' B+ V6 m; P6 E以及饼图:
    : S. \( H+ f) H- p; d' z2 p
    ! U# K( {0 `! w& U( ~% X. r  z) V7 I3 G3 p; u7 t* c
    可以得出几个结论:
    1 a4 K% Y- D+ u1 ?  X1. 尾高型的单词很少(约2%,大部分在2拍和3拍的单词上,2拍和3拍五五开,总共约1300个单词(在7万多个单词中)。
    5 M. ]; R  ~8 }* k/ ~2 i2. 头高型的单词次少(约17%),主要集中在3拍的单词上(约51%),2拍和4拍都约占20%左右。7 M- U( D9 o6 Y9 n* `3 O& v
    3. 日语中4拍的单词最多(约42%),并且相当一部分(约72%)是平板型。这和新标日中入门单元里,“声调和语调”部分中“声调”小节里的解说是一样的。3 K$ x1 ?8 u- F1 g  V1 B5 F9 U
    4. 记忆平板型和尾高型的单词时,单词本身发音规律相同,都是前低后高,但后接的助词音调不同,不好记忆。但通过上述统计,可以这么做:(两拍以上)尾高型的单词单独记忆后续助词的音调,其后续助词的音调总是低的,而在一般情况下,一个单词(两拍以上)后接的助词的音调(高或低)和该单词的最后一拍是相同的。一拍的单词完全不符合这个“一般情况”,只需要记住这一拍本身是低还是高,再根据“一个单词中第一拍和第二拍音调必定不同”来确定助词音调。单词本身的音调则通过多听、多用以形成固定的记忆。
    1 q. S$ Y; u' v  ^4 R5 o; M3 z& F1 k. N7 F; |0 ^/ G5 Z

    # `* |: u' O0 z) L0 I
    ( t3 P: o6 x) D; c) ]
    + n8 G7 ^/ l) b) @+ o7 G! T' z
    % c5 a* M7 S* S  r2 c
    , t5 {7 ~4 Y! L: Y  K# d2 @- k% q2 r/ h! q$ r0 ?% s; e

    本帖子中包含更多资源

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

    x

    评分

    2

    查看全部评分

    本帖被以下淘专辑推荐:

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

    [LV.10]以坛为家III

     楼主| 发表于 2019-3-24 07:52:11 | 显示全部楼层
    kriskr 发表于 2019-3-24 00:48
    5 \- h; H+ ?+ E; b& F+ ~' s想问下楼主ebdump导出后如何转码为utf8 为什么我转码后,是乱码,求赐教,是需要一些python改动吗 ...
    . G# E$ h2 e. t8 R. V$ V. r
    文本编辑我一般用 notepad++,开源又好用。其中的 Encoding 菜单中有个Convert to UTF-8,可以转码。
      A6 l' `0 z- e4 c2 h  k
    : _" M6 d1 W+ h0 t$ z. s1 O7 }在正则表达式替换的过程中,做了如下处理:, m+ S7 @8 Z9 T# |9 D3 p
    1. 删除了多个单词组成的条目。这种条目分别对每一个组成单词都标注了音调。0 B! |( G& T9 F
    2. 声调类型统计只统计0-9,10及以上不统计。# Q5 J; M1 K/ w  J, w& t0 |
    3. 拍数在16拍及以上的不统计。
    8 P8 o, A. Z8 G5 S* H8 r* P! {以及一些细微的调整。
    9 u& `* Z+ Y' L1 ?. H5 x
    ( k( m; D$ o6 ^/ a因为各人处理的方法不同,你最终得出的统计结果可能和我不太一样。
  • TA的每日心情
    慵懒
    2021-11-14 17:58
  • 签到天数: 999 天

    [LV.10]以坛为家III

    发表于 2019-3-23 22:43:16 | 显示全部楼层
    本帖最后由 kapan000 于 2019-3-23 22:46 编辑 8 |" U8 m" u8 h" `
    " _. x  w/ X. T- V
    请教几个问题5 [) K& f  j" n: @! c/ s
    1、新明解单词数较少,可否统计下超级大辞林?1 B( T$ R( X3 X/ c" x
    2、统计饼图,可否给出所占比例和数量。这样更好看点。
    $ o; j* S" i! I9 H3、可否给出统计的xls?我想再算下,10拍以内,各拍那个声调多一点及其比例) D& f( p" N! N; V$ i# a
    0 a  {* z( b4 y% S9 b
    没想到0声单词这么多- u: J4 @1 r  P, U# H& j
    我一直认为2,3,4...这类最多
  • TA的每日心情
    开心
    2023-3-10 21:15
  • 签到天数: 1329 天

    [LV.10]以坛为家III

     楼主| 发表于 2019-3-23 23:12:18 | 显示全部楼层
    kapan000 发表于 2019-3-23 22:437 O  P" O  o+ _* ?8 _6 o
    请教几个问题+ v0 a# a# i$ \. W1 @+ `
    1、新明解单词数较少,可否统计下超级大辞林?
    0 [6 D! F5 }  z% ]$ b5 E2、统计饼图,可否给出所占比例和数量。这样更 ...

    1 p; K- e) V0 m我觉得统计超级大辞林没有必要。原因有以下几点:$ n& x$ A# \. N4 u6 }9 d
    1. 新明解已经收录了常用单词,这个统计是用来指导记忆声调的,对常用7万单词的统计我觉得真的已经足够了。2 Y' h& L- V3 W6 \: F/ U' x  n
    2. 要对超级大辞林进行数据清洗是非常麻烦的。其中的百科词条等,也不太常用。7 n( y. \. R5 O3 O
    3. 超级大辞林中的大量片假名词语(外来词等),其声调相比常用和语、汉语词汇,没有那么固定。如果将其纳入统计,我觉得并不具有代表性。0 H. r# c! ?$ T! x) W: [; U
    4. 对于超级大辞林中古语的声调,我觉得统计了也没有什么代表性,我学现代日语就已经够呛了。: u  S  E% D/ v

    / t% K7 F. l  e2 v/ V6 p, L0 X; c; N2 |学日语真心推荐新明解,你可能觉得它收词量小,但是它还告诉你词汇的用法,一些有用的信息等。
    6 c! [6 i5 O3 B/ e# `8 i# [2 O+ _' C. w/ W5 @
    这个EPWING版的新明解好像是通过别的格式转来的,里面有很多东西没转对,问题有点大,最好不要用。
  • TA的每日心情
    慵懒
    2021-11-14 17:58
  • 签到天数: 999 天

    [LV.10]以坛为家III

    发表于 2019-3-23 23:43:22 来自手机 | 显示全部楼层
    本帖最后由 kapan000 于 2019-3-24 00:01 编辑
    / i, m6 R7 O& a* g* V
    enjoy了哦 发表于 2019-3-23 23:12' y, H/ B- q$ t, F) J
    我觉得统计超级大辞林没有必要。原因有以下几点:
    / e3 N7 E& M- p0 f* _4 u# u1. 新明解已经收录了常用单词,这个统计是用来指导记忆 ...
    & P: }& v, G9 ~8 ?
    非常感谢。请问下,这个统计是全部单词?是否包含了片假名单词?" i2 e# Y! `7 U! f/ z4 C

    * l8 U* t, i7 q  K9 V& h如果可以的话,能否再统计以下3个纬度$ J8 q! z" M0 X  ~9 F; O+ ~
    这样就更细化,明白了
      |$ |0 m' @) q$ m+ [# T纯片假名
    ) e( M% g8 H' F) \* l8 i: m有汉字的) D/ J0 X4 ?' z0 [  r9 O: Q
    纯平假名的,即完全无汉字的
    * M8 N% S* A0 z* p! Q1 ?0 i6 @; k  _! G: M2 w9 J
    谢谢; K' V# J! y6 J+ x% q

    $ A$ X7 R$ a! [) Z0 E0 v* q3 |) c0 g/ z1 i
  • 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-4-24 09:13 , Processed in 0.023031 second(s), 24 queries .

    Powered by Discuz! X3.4

    © 2001-2023 Discuz! Team.

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