掌上百科 - PDAWIKI

 找回密码
 免费注册

QQ登录

只需一步,快速开始

查看: 3078|回复: 8

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

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

    [LV.10]以坛为家III

    发表于 2019-3-23 21:42:30 | 显示全部楼层 |阅读模式
    本帖最后由 enjoy了哦 于 2019-3-23 23:23 编辑
    5 d0 T3 f$ P3 J
    3 v+ X6 [3 h6 V+ `( u7 r$ T2 g通过调查日语单词中音调类型的比例,可以得出一些结论,方便记忆单词本身和其后续助词的音调。; z; Y% F; W9 t: @: Y! P

    ' V" J4 Z1 u7 B* @原始数据:新明解国语辞典第5版(EPWING格式)
    2 |8 y" B% `7 x0 o8 P首先通过 EBDump 打开该EPWING格式词典的文件夹的 HONMON 文件,导出其中的“前方一致表記形見出し”部分,选择全部的1412个block。3 Y" Z, _9 e7 H0 @* ^

    # X5 B" m9 ~1 M0 P
    / n, ^0 |* H- p4 R& b4 W9 n( s导出后,将该文件转码成 UTF-8 格式,并使用正则表达式替换部分内容,使其容易被后续分析处理。- n3 [3 f' s# [* \

    * J3 ~7 Q7 j) o+ V( n+ r/ j4 {: \
    为统计尾高型音调,需要知道每个单词的拍数。由于拗音占有两个字符,但只算一拍,为了方便统计,将其中的小的[ゃ][ゅ][ょ] 及对应的片假名(还有小的[ア][イ][ウ][エ][オ]等,外来词专用音节)去掉,即[きゃ][きゅ][きょ]中后面那个字符。这样一来,拍数就等于字符数了。
    - u/ f6 N* m* S( W
    3 c; ?6 Z# {: P) Z( h最终的经过清洗的“干净”的数据如下所示,根据个人的习惯进行处理:+ Z! C6 C( x  R% [, h
    ( {$ U6 b* h* v# F/ l; e* x
    6 i# e/ Q7 X6 W8 N: ^7 D5 X
    然后可以通过 Python 进行统计,一个单词可能有多个音调,但只统计第一个音调(稍微改动源码可以统计所有的音调)。这个代码可以用来明白大致的统计思路,后续还有写零碎的更改,并没有体现在这里面。
    & s  X; C5 w' M0 G) r3 b
    1. #!/usr/bin/env        python
      ' b) `' C4 W& u6 D7 {4 W/ Z+ \+ x
    2. #_*_        coding:utf-8        _*_
      ) S6 M& f: j8 p( c7 C; R

    3. 7 f6 }# H- y/ t" q/ k) P
    4. import sys,os
      3 r# q( K8 O0 k: M
    5. import numpy as np
      8 {, h9 Z) ~: t8 q, ]
    6. 6 `4 G- [4 ^& X! m8 o
    7. # 带有音调标记的词汇数目
      ! K5 E' |: @: c# [0 L& C2 T9 o
    8. all_entry = 0
      9 Y- Q1 f1 B; ]8 `
    9. - U' v; L  R5 z9 Z. O3 d" R
    10. # 平板型,[0]% M$ w+ [. p8 r' F* @* R0 @
    11. entry_0 = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
      1 {6 ]6 T: z( C/ }, H) v& ]
    12. ! U) @1 K0 t8 Y7 t
    13. # 头高型,[1]
      # J- \7 ~3 g* t$ @# l
    14. entry_1 = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
      ) i6 H3 B- F; d9 Y

    15. & K+ v: c+ h6 k) N( V; R
    16. # 尾高型,[x] = 拍数
      % `( u9 q* Y& {( n: N+ s9 o% ?1 p
    17. entry_last_high = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
      3 ~+ I8 y& J3 L7 H

    18. - X2 z1 N/ P: w# f
    19. # 中高型,[x] < 拍数
      . d( A% `- X1 h3 V) M
    20. entry_middle = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]( u  N9 O: A( x/ x& f
    21. " l  ^/ t1 ?3 u5 U% L# X7 [
    22. file_name = sys.argv[1]
      ' c8 q$ e. g  F# A( p, R. o! r# _
    23. f = open(file_name,'rb'); q8 s6 V5 `6 n7 e; U1 K6 G! V. f9 u. B
    24. for line in f:
      $ \  J8 w! U( B0 f3 H; C
    25.         line = line.replace(b"\r\n",b"")
      0 u& l) \% e7 ~/ L; Y: w) x
    26.         line = line.decode()6 n- M% K/ x8 u0 T' a. q' d% r8 v. ?( C! \
    27.         db = line.split(','); P$ J6 h7 ~3 L$ r+ t
    28.         word_len = len(db[0]); p: [8 [& Z4 Y0 x4 M
    29.         if word_len < 16:/ o$ D- B, X: J( N6 {$ F
    30.                 all_entry = all_entry + 1" r7 J9 C" z- I' k- @; d) v  }* S2 i
    31.                 for i in range(1,len(db)):
      * O  C# O3 W. u$ Y/ e4 W
    32.                         accent = db[i]
      0 c) `8 H  a' m9 x
    33.                         if accent.startswith('['):6 W- Z+ M- L9 M5 N& Y7 m' b9 }
    34.                                 integer = int(accent[1])
      % s5 g6 p5 L; Y% }8 e4 @
    35.                                 if integer == 0:
      / o8 ~1 h: w! v
    36.                                         entry_0[word_len] = entry_0[word_len] + 1
      3 A7 m) ?" g" @- H. i6 T' {; w
    37.                                 elif integer == 1:
      6 O% p3 |% V- O) Q' }# i
    38.                                         entry_1[word_len] = entry_1[word_len] + 1
      5 O- u, e9 f9 u: o& G" Y
    39.                                 elif integer == word_len:
      # p3 m& u/ b+ v: ], h+ q$ c! k
    40.                                         entry_last_high[word_len] = entry_last_high[word_len] + 1
      % R) ]1 d; O7 u+ W( ]
    41.                                 else:
      * T- C9 d; M0 j5 k2 I8 E- U3 W
    42.                                         entry_middle[word_len] = entry_middle[word_len] + 1
      8 ~  x0 Q- w  L3 Y/ J- D& B
    43.                                 break, l6 n$ h2 i3 x% ]
    44. 8 W" @" V. m/ f! ]7 s; p9 z
    45. print('[0]:')
      . w2 y! l: p) {/ N. Y7 k4 m- y3 L
    46. for i in range(1,len(entry_0)):
      6 Z$ `7 ~! f( z% `8 z+ u1 A
    47.         print('%d' % (entry_0[i]))4 b# X1 O9 A: N6 L" V
    48. print('entries: %d' % np.sum(entry_0))& o4 f9 v6 k* N
    49. print('\n')
        h( x+ t* m0 _' P# B

    50. 0 N/ G5 M+ x1 f6 E* X: C8 f
    51. print('[1]:')6 S* D6 T* B5 p; H7 M. U) r
    52. for i in range(1,len(entry_1)):1 Z' R; ~* V6 t; o& z6 ^% r9 c
    53.         print('%d' % (entry_1[i]))
        n% |( g; M7 z# `$ x* I4 k5 x
    54. print('entries: %d' % np.sum(entry_1))
      7 v% }* F, F8 S( M0 R1 k! w" c  e% B
    55. print('\n')) e" ~" L5 t. [+ q. P

    56. 5 z+ x6 f- a' ]& B: N, g
    57. print('middle high:')
      ( g2 z. c) d$ t% }$ G8 N# u6 [
    58. for i in range(1,len(entry_middle)):
      / K: d% Y  t4 i& ]; \( O
    59.         print('%d' % (entry_middle[i]))
      7 R: o" p  e  K8 Z
    60. print('entries: %d' % np.sum(entry_middle))
      / l$ C. V# c: b" T& |/ M! K$ p
    61. print('\n')
      5 l; ^8 K. A% c5 K! w
    62.   L9 D2 W5 N$ C5 B2 b: D
    63. print('last high:')$ j& K; M/ {  N9 J5 k" U
    64. for i in range(1,len(entry_last_high)):0 X$ z+ R% b8 n( u
    65.         print('%d' % (entry_last_high[i]))
      1 v& c7 |5 O* R3 j2 R
    66. print('entries: %d' % np.sum(entry_last_high))6 W+ U9 Q# ]( H' y2 U5 @; X: O
    67. print('\n')# r$ l2 f7 O0 c  l3 u6 I# c
    68. - r% U5 h6 ]! s9 R" L. \) j
    69. print('all entries:')4 C8 v' y1 @# k4 \& D+ C
    70. print(all_entry)
      - l9 I$ ]: j" P, X# I2 ]  O0 v

    71. ) Q' V! y( W2 J5 ^  S
    72. f.close()
    复制代码
    8 B) h  o) I9 I5 m

    3 X/ a; g2 N  W! w0 x" e8 I+ g' a最后将 Python 输出结果进行数据可视化:
    - N1 x8 s; K$ C& g( C; ~5 O. Q$ J, w. ]! H: V

    : l7 g) I, B7 w* g
    . E; u- G& u) Y8 {0 s5 V% R1 z1 i" R) T5 r# f. s) h
    以及饼图:
    5 T9 c/ f- Z( w7 v9 w( ]( k: G- q7 ^/ _5 L# |
    9 P: e9 w6 }0 J9 ^# _
    可以得出几个结论:
    * U1 z9 J) k; y( h/ Y0 c8 w1 ?1. 尾高型的单词很少(约2%,大部分在2拍和3拍的单词上,2拍和3拍五五开,总共约1300个单词(在7万多个单词中)。2 ?8 W+ R' W) m, w7 X! F
    2. 头高型的单词次少(约17%),主要集中在3拍的单词上(约51%),2拍和4拍都约占20%左右。! B' K6 K; C0 P' y
    3. 日语中4拍的单词最多(约42%),并且相当一部分(约72%)是平板型。这和新标日中入门单元里,“声调和语调”部分中“声调”小节里的解说是一样的。7 k8 K& h" k5 A8 p3 L. J
    4. 记忆平板型和尾高型的单词时,单词本身发音规律相同,都是前低后高,但后接的助词音调不同,不好记忆。但通过上述统计,可以这么做:(两拍以上)尾高型的单词单独记忆后续助词的音调,其后续助词的音调总是低的,而在一般情况下,一个单词(两拍以上)后接的助词的音调(高或低)和该单词的最后一拍是相同的。一拍的单词完全不符合这个“一般情况”,只需要记住这一拍本身是低还是高,再根据“一个单词中第一拍和第二拍音调必定不同”来确定助词音调。单词本身的音调则通过多听、多用以形成固定的记忆。# A$ G* D, W  [

    : q( [2 Z0 Z3 ?" h. x0 `1 T: G1 Q& ~2 v- e5 @7 c
    5 {  t- M( d) B% `  g

    ' {; u% q- }* [/ }# Z
    0 G9 n8 s- f4 F/ c6 k/ |6 `$ S9 F$ F, F/ r5 f7 U* L1 X

    * C6 L, `2 B" M9 H! g: f7 ~

    本帖子中包含更多资源

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

    x

    评分

    2

    查看全部评分

    本帖被以下淘专辑推荐:

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

    [LV.10]以坛为家III

     楼主| 发表于 2019-3-24 07:52:11 | 显示全部楼层
    kriskr 发表于 2019-3-24 00:482 C$ e, M7 W( d' {( B' O
    想问下楼主ebdump导出后如何转码为utf8 为什么我转码后,是乱码,求赐教,是需要一些python改动吗 ...
    2 H1 Z5 K6 m( T# u: S
    文本编辑我一般用 notepad++,开源又好用。其中的 Encoding 菜单中有个Convert to UTF-8,可以转码。* R) `% ^3 S# {3 ?

    $ T( t+ Q9 l2 c在正则表达式替换的过程中,做了如下处理:( J7 e4 _5 s3 V: B
    1. 删除了多个单词组成的条目。这种条目分别对每一个组成单词都标注了音调。
    " O5 o( D+ }0 _0 l- K) X# V2. 声调类型统计只统计0-9,10及以上不统计。
    ) Q; ?! U1 O  S1 w+ V( u4 h, Z3. 拍数在16拍及以上的不统计。
    1 k! |# f" P6 c以及一些细微的调整。
    1 }4 ?! M1 a  A! t
    + f& p2 j" w0 y; u+ D因为各人处理的方法不同,你最终得出的统计结果可能和我不太一样。
  • TA的每日心情
    慵懒
    2021-11-14 17:58
  • 签到天数: 999 天

    [LV.10]以坛为家III

    发表于 2019-3-23 22:43:16 | 显示全部楼层
    本帖最后由 kapan000 于 2019-3-23 22:46 编辑
    ( k) d7 O8 |; r% M$ |) \
    " c  \( k* R8 V& I- f请教几个问题
      p, w& M/ w+ q* x5 B5 V1、新明解单词数较少,可否统计下超级大辞林?! H& O0 S1 G2 K4 ?
    2、统计饼图,可否给出所占比例和数量。这样更好看点。/ W( C! ]3 e/ u* s8 z
    3、可否给出统计的xls?我想再算下,10拍以内,各拍那个声调多一点及其比例' u) w7 p# a4 @4 o4 E8 s  {
    # |; h/ l  D- |! e! _5 x
    没想到0声单词这么多2 D  ^6 h1 |; R, k+ T/ X
    我一直认为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) R5 z8 y2 ]4 @/ K7 j+ L
    请教几个问题
    1 j% p# ^) j- r9 b- F$ p8 f1、新明解单词数较少,可否统计下超级大辞林?+ d* C0 h( J8 S6 ?. _
    2、统计饼图,可否给出所占比例和数量。这样更 ...
    & B4 ?, l7 |* @- ]
    我觉得统计超级大辞林没有必要。原因有以下几点:; M4 d& e/ n" j& K
    1. 新明解已经收录了常用单词,这个统计是用来指导记忆声调的,对常用7万单词的统计我觉得真的已经足够了。
    ) C4 k4 J$ K, }' ]- F% s' w) k2. 要对超级大辞林进行数据清洗是非常麻烦的。其中的百科词条等,也不太常用。; x/ B, s) ]. z
    3. 超级大辞林中的大量片假名词语(外来词等),其声调相比常用和语、汉语词汇,没有那么固定。如果将其纳入统计,我觉得并不具有代表性。
    8 c# y* g3 I% n7 P! N+ L4. 对于超级大辞林中古语的声调,我觉得统计了也没有什么代表性,我学现代日语就已经够呛了。
    ' V, h2 E6 {8 ]: q6 l" B; h( C* b% {
    学日语真心推荐新明解,你可能觉得它收词量小,但是它还告诉你词汇的用法,一些有用的信息等。1 F! h/ W( v0 M+ r4 I; ^( y8 k

    4 }* P* e$ |/ i4 m' w) V. g# M' k这个EPWING版的新明解好像是通过别的格式转来的,里面有很多东西没转对,问题有点大,最好不要用。
  • TA的每日心情
    慵懒
    2021-11-14 17:58
  • 签到天数: 999 天

    [LV.10]以坛为家III

    发表于 2019-3-23 23:43:22 来自手机 | 显示全部楼层
    本帖最后由 kapan000 于 2019-3-24 00:01 编辑 2 c% t5 p7 G: c/ c* v, K
    enjoy了哦 发表于 2019-3-23 23:129 v3 X+ s; o9 V
    我觉得统计超级大辞林没有必要。原因有以下几点:1 [( T- ^% ?8 O# T% Q; q: V# Z
    1. 新明解已经收录了常用单词,这个统计是用来指导记忆 ...

    & d0 C" O: b, I$ d非常感谢。请问下,这个统计是全部单词?是否包含了片假名单词?4 U1 P( Z% }9 b4 s# c7 Y9 k0 ?

    ! P/ \$ r8 \1 G/ I6 \+ U3 f+ }如果可以的话,能否再统计以下3个纬度. o7 C. w9 Q# r7 z0 a$ V0 B' {
    这样就更细化,明白了, m9 h2 S: S9 _3 _
    纯片假名
    % o! G8 K9 O5 c有汉字的
    % @5 Z" A3 W( C- r! p纯平假名的,即完全无汉字的
    0 W1 q* R5 r  z; c! U5 D) T" A" ]( F0 j: N8 H/ l' S
    谢谢5 e' x  u4 ]% G3 P

    9 n/ c- i3 ^$ E4 [4 ^4 P" }% o) G0 K7 z* }2 X) D1 N4 e
  • 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-5 22:28 , Processed in 0.023485 second(s), 25 queries .

    Powered by Discuz! X3.4

    © 2001-2023 Discuz! Team.

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