TA的每日心情 | 开心 2023-3-10 21:15 |
---|
签到天数: 1329 天 [LV.10]以坛为家III
|
本帖最后由 enjoy了哦 于 2019-3-23 23:23 编辑 + I/ G# |! x6 Z7 \# e8 i: Y* d
" @3 [( D/ F+ a$ y4 }' [( ~2 o通过调查日语单词中音调类型的比例,可以得出一些结论,方便记忆单词本身和其后续助词的音调。
% U- g5 O4 h- g. ~2 M3 t
: M" r; G) m- Q4 o- Y7 A原始数据:新明解国语辞典第5版(EPWING格式)5 @5 S8 Q2 {: T: ~5 P
首先通过 EBDump 打开该EPWING格式词典的文件夹的 HONMON 文件,导出其中的“前方一致表記形見出し”部分,选择全部的1412个block。. O* F+ d5 q3 t' F, `6 u/ H. j
) }. n# e, u; f8 \" V9 Q; f. K+ G5 Q7 @, ?
导出后,将该文件转码成 UTF-8 格式,并使用正则表达式替换部分内容,使其容易被后续分析处理。8 i9 d) ^; `3 R1 p3 \/ f# w; _
3 K& U1 h$ b; r3 @8 o" D, H
4 e1 b/ K% b5 w4 d! F! B为统计尾高型音调,需要知道每个单词的拍数。由于拗音占有两个字符,但只算一拍,为了方便统计,将其中的小的[ゃ][ゅ][ょ] 及对应的片假名(还有小的[ア][イ][ウ][エ][オ]等,外来词专用音节)去掉,即[きゃ][きゅ][きょ]中后面那个字符。这样一来,拍数就等于字符数了。3 [6 p- O7 o7 d. @9 |- G
9 n5 E E/ ?1 v
最终的经过清洗的“干净”的数据如下所示,根据个人的习惯进行处理:9 M H y _9 v1 ?4 ?+ I" Z
) S" U6 c* \! t8 A# N8 I) c, m. Y) t
% J E( j+ Z% f1 ?# M
然后可以通过 Python 进行统计,一个单词可能有多个音调,但只统计第一个音调(稍微改动源码可以统计所有的音调)。这个代码可以用来明白大致的统计思路,后续还有写零碎的更改,并没有体现在这里面。
" B( i& U ?+ |) C- #!/usr/bin/env python
* ~8 }" t5 H; J& d2 A6 A" ] - #_*_ coding:utf-8 _*_/ V$ `4 H- s. @& H6 h
- ' }, ~) w. p: U/ v; s2 D$ B# h
- import sys,os# r9 ]( r L8 \7 d0 `
- import numpy as np
7 E( v# W' P, Z0 y. V6 ~ - ! t/ T" a# `6 C' ]$ ^! h
- # 带有音调标记的词汇数目
7 p; _3 M% z$ Y6 N% t. d - all_entry = 0* t8 J' f2 g! k7 w
- Q- q1 F5 z) n: a* |6 S9 s
- # 平板型,[0]
# r5 _2 `" b! \, @; k - entry_0 = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]- i; e$ ~- ]/ N. ~6 \
; p; i6 S! M4 M! o0 w- # 头高型,[1]0 S; H" G1 u+ g' ?4 v
- entry_1 = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
7 Z0 x) l' O! R& C1 F6 N
$ ?* U% ?% i6 l0 B, \" z- # 尾高型,[x] = 拍数) b) E' ^+ E! B7 z. m7 r2 C
- entry_last_high = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]9 X2 D2 q) V/ A# Y
2 b. v( I u/ Z, [- # 中高型,[x] < 拍数
0 ~4 D5 N$ a) o* g c; b* u - entry_middle = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
0 v6 a, |5 e3 R* Y X& f* O3 c
' J. i0 ]2 B7 V& |- k2 {& p- file_name = sys.argv[1]3 ]* Z H+ R7 A9 F' [3 @
- f = open(file_name,'rb')2 g& N9 S: z" h8 S: ^# l5 s, n( b* `
- for line in f:; {" }! |/ h0 t v' Y. u) n7 f3 w6 E
- line = line.replace(b"\r\n",b"")$ S3 }* {9 q4 ^6 j2 p! R
- line = line.decode()
) n) b& w& w3 V( p7 Z - db = line.split(',')
% y0 U) r! o7 k. b! ]/ x - word_len = len(db[0])+ O1 S4 f9 e6 h
- if word_len < 16:
8 u/ Z J5 a- [7 R7 i - all_entry = all_entry + 1
4 Z+ k' q9 G! \ - for i in range(1,len(db)): o" M% ^+ F& g! A/ |
- accent = db[i]9 C( M- I3 C6 k- H2 U7 b
- if accent.startswith('['):
7 ~- \5 y6 j! V. C - integer = int(accent[1])
; S' g7 J: p0 n. f( e - if integer == 0:3 Z! k3 v3 V! {3 g0 V0 g) F+ [
- entry_0[word_len] = entry_0[word_len] + 1" |# |) M7 q$ _" t; J& i
- elif integer == 1:
4 g2 ~+ i+ S3 Y( @) B - entry_1[word_len] = entry_1[word_len] + 13 r; h- c; O8 y* G( p- O! Q
- elif integer == word_len:
7 U% f+ I* g g9 O) H! Y - entry_last_high[word_len] = entry_last_high[word_len] + 1
3 G2 W4 G) M; j - else:. y/ d9 ?6 Z4 k8 U2 I" G
- entry_middle[word_len] = entry_middle[word_len] + 1% W8 }% G, p# h4 ^: ]
- break
* h. |# r" }: o# y- k - D5 j. i& x1 {, F: f+ N2 q. Y
- print('[0]:')9 I d: b7 l0 E. K& S# O+ `
- for i in range(1,len(entry_0)):
4 ^% ?- ^( |* I1 ], E$ c5 [- c - print('%d' % (entry_0[i]))
8 Q' h& D& M7 Z; w' o& g* [ - print('entries: %d' % np.sum(entry_0))5 P' X2 `0 L6 Y( T3 Q# h9 ]
- print('\n')
6 C" ^$ w0 M9 M# q
& h$ I9 p$ i. L/ r8 s4 T- print('[1]:')7 F& ~$ n2 J2 p4 z L% s# d) p
- for i in range(1,len(entry_1)):
) I5 V: M! F" E6 G: K( W- a% B - print('%d' % (entry_1[i]))
@7 b0 L' V0 O$ m - print('entries: %d' % np.sum(entry_1))
' l3 b# s; t) z% E0 u* { - print('\n')
( y/ _% O3 y) h" q - " [! p' P6 }0 ?9 X1 i1 \, F
- print('middle high:')
8 m' A) b1 s* _; J - for i in range(1,len(entry_middle)):1 n4 y: Y/ Q6 e1 |
- print('%d' % (entry_middle[i]))
/ v5 i/ U: k8 R0 {& _, a - print('entries: %d' % np.sum(entry_middle))1 q: }: t: U) u( B
- print('\n')/ J* |, ?! [7 X# o
- . \+ _3 n0 e% j' N- S" v
- print('last high:')
) j4 X3 k6 u8 O - for i in range(1,len(entry_last_high)):
9 Z @! L3 i, b# P - print('%d' % (entry_last_high[i]))
* o7 y! v1 t* I1 V& P L - print('entries: %d' % np.sum(entry_last_high))
9 e! {0 A5 v0 S+ ~0 }% R - print('\n')7 O( J9 @$ Q; R
) `8 t$ @' ~( N) }. i; B4 M8 X9 l- print('all entries:')" }' @8 Y" v5 O. v- |
- print(all_entry); Y' I$ x! b4 Y
; L: L; W% A2 }1 Y2 C5 S6 O5 p6 @0 [- f.close()
复制代码 ' D- H( ^: h$ p: A. q4 L* `
1 u) d" y- Z {- Y- E
最后将 Python 输出结果进行数据可视化:
8 f( v7 \+ N. `8 e# p
3 w' Z8 q+ g: p$ k9 Z( u! X! W: ^' z2 \" U. ^) a( G2 g
4 z/ Z p9 V4 \1 H: T6 u b
- a) a. c" e7 W4 W0 u
以及饼图:1 ~: c9 P+ @2 C. g
- Q4 \3 \: M0 N( D4 X, i
6 G% {' n. g3 N. S1 l9 d$ p) V6 N
可以得出几个结论:/ e0 r& N1 N8 L2 y/ ~
1. 尾高型的单词很少(约2%,大部分在2拍和3拍的单词上,2拍和3拍五五开,总共约1300个单词(在7万多个单词中)。0 D8 H3 B$ [* M! ?
2. 头高型的单词次少(约17%),主要集中在3拍的单词上(约51%),2拍和4拍都约占20%左右。: \- ?& T2 @7 } j7 n9 J3 x
3. 日语中4拍的单词最多(约42%),并且相当一部分(约72%)是平板型。这和新标日中入门单元里,“声调和语调”部分中“声调”小节里的解说是一样的。
7 Y' t, @9 ~2 ?0 q+ @4. 记忆平板型和尾高型的单词时,单词本身发音规律相同,都是前低后高,但后接的助词音调不同,不好记忆。但通过上述统计,可以这么做:(两拍以上)尾高型的单词单独记忆后续助词的音调,其后续助词的音调总是低的,而在一般情况下,一个单词(两拍以上)后接的助词的音调(高或低)和该单词的最后一拍是相同的。一拍的单词完全不符合这个“一般情况”,只需要记住这一拍本身是低还是高,再根据“一个单词中第一拍和第二拍音调必定不同”来确定助词音调。单词本身的音调则通过多听、多用以形成固定的记忆。
; f+ j1 [1 R h4 u- Q4 m, S( B4 k E7 Y8 _+ ]7 s5 O2 v
, U' D) m# }; B; Q& R' J- i, f6 }2 m) H" g" [
! t. o6 Q k) ]% o1 x) }
+ V! w, w1 L# [
- B$ @/ @" c+ a# p6 B: K: K5 Q& P2 V$ c0 q
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?免费注册
x
评分
-
2
查看全部评分
-
本帖被以下淘专辑推荐:
- · 词典制作|主题: 217, 订阅: 40
- · 语言态度|主题: 150, 订阅: 19
|