TA的每日心情 | 开心 2023-3-10 21:15 |
---|
签到天数: 1329 天 [LV.10]以坛为家III
|
本帖最后由 enjoy了哦 于 2019-3-23 23:23 编辑 " n% L+ _( `! G. H& A
+ ^8 s. M9 o( x; [ x通过调查日语单词中音调类型的比例,可以得出一些结论,方便记忆单词本身和其后续助词的音调。
" R8 S2 Y. x0 Q2 Y
0 m9 l' R) B) R `5 E7 o* h7 N原始数据:新明解国语辞典第5版(EPWING格式)
+ o" m* e# |" v3 U! c! e1 @2 t N' J首先通过 EBDump 打开该EPWING格式词典的文件夹的 HONMON 文件,导出其中的“前方一致表記形見出し”部分,选择全部的1412个block。
6 n- G9 x! u( R1 U, I' H' X+ y
2 g R: Z$ y+ J3 s; ]/ \; Z) ?( V* p; i' E
导出后,将该文件转码成 UTF-8 格式,并使用正则表达式替换部分内容,使其容易被后续分析处理。
, w/ R; W7 L p+ V$ F1 t3 P: J3 {- F
+ _4 C) I) B3 B& M/ R4 y
! l4 |8 {2 s% b) [- C$ I为统计尾高型音调,需要知道每个单词的拍数。由于拗音占有两个字符,但只算一拍,为了方便统计,将其中的小的[ゃ][ゅ][ょ] 及对应的片假名(还有小的[ア][イ][ウ][エ][オ]等,外来词专用音节)去掉,即[きゃ][きゅ][きょ]中后面那个字符。这样一来,拍数就等于字符数了。# G& c9 r; X( q4 o' p; W
$ e7 L! s% R% T' L最终的经过清洗的“干净”的数据如下所示,根据个人的习惯进行处理:% E* \" w) h+ l- n0 R7 o% j1 Q
, G3 X& j# _/ ^1 H1 j- J* K ^7 L4 h) O( H
然后可以通过 Python 进行统计,一个单词可能有多个音调,但只统计第一个音调(稍微改动源码可以统计所有的音调)。这个代码可以用来明白大致的统计思路,后续还有写零碎的更改,并没有体现在这里面。/ i6 r3 E0 Y- Z+ F
- #!/usr/bin/env python
* h6 S+ P% P i/ o - #_*_ coding:utf-8 _*_
) R# }. @1 T- _% o5 f
h8 m0 V$ m; Y7 J, U& C& Q- import sys,os b6 h) q5 D F' h L+ |" Q- x
- import numpy as np: o* G& U( H* E- f& r. t- a# g
- . q% f' X2 C# K( D: Q+ Q
- # 带有音调标记的词汇数目
0 L/ J# ~) s' @: F; E - all_entry = 0: e0 E6 O0 r; {: X& V
- V4 e4 A; j$ M5 {( ^& ~% }" V
- # 平板型,[0]# P$ z, a3 F U3 a/ D. e# Q% r2 R4 y) U
- entry_0 = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
1 ]6 F z2 \4 Z# Y+ i" Y
5 x% ^2 U4 @9 H7 \$ [9 f$ i- v- # 头高型,[1]( P( E( s+ S$ F
- entry_1 = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]& C2 E& _; z6 w. t" x8 l: ]
- ! J! B9 }4 ^# h' m! g1 ?, G) ^
- # 尾高型,[x] = 拍数
* ]8 l: l$ h I - entry_last_high = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]& h9 H. A1 A$ h0 c P2 ]
, @3 X$ ^4 V: D5 Q- # 中高型,[x] < 拍数
6 ]7 N+ `3 J3 G& k - entry_middle = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]& s. `2 R; C' H2 R4 r6 }& ?
- {1 [& @8 f p- file_name = sys.argv[1], x! Q: C6 ~1 p7 C) u7 q! p* W
- f = open(file_name,'rb')
5 \% F$ X: U3 j9 v; _$ u- i; `" ] - for line in f:
' M1 q; G, a3 l) Q - line = line.replace(b"\r\n",b"")
8 g. p& D$ \; ~" b y - line = line.decode()
7 y3 ?4 F( K4 y, g' ~1 e - db = line.split(',')6 ~* l* \2 _0 ]! e
- word_len = len(db[0])
# L- L5 S' |$ ~7 [4 ^ - if word_len < 16:
u) f& c( `9 ?# ], \8 l# C - all_entry = all_entry + 1
1 H- K* m2 I9 G - for i in range(1,len(db)):1 t3 w- N6 _% l' Q& J- X
- accent = db[i]2 _% y/ |2 K+ |$ H5 l
- if accent.startswith('['):' Q. i! J- P! r9 ]7 F
- integer = int(accent[1])- u0 ^7 I0 u- _/ L2 c0 M
- if integer == 0:
! y Q+ k7 E) ^ ? - entry_0[word_len] = entry_0[word_len] + 1
0 W% n8 B$ s3 P7 N# k - elif integer == 1:
8 }- @+ } y9 N! w - entry_1[word_len] = entry_1[word_len] + 1& P5 d2 R5 P- e( T* S t
- elif integer == word_len:1 h% m1 G6 [3 I/ E( d
- entry_last_high[word_len] = entry_last_high[word_len] + 1
7 e; N$ l; u$ Q, [ - else:' s; s5 H2 J& V4 g; q: b
- entry_middle[word_len] = entry_middle[word_len] + 1+ X1 }* m. R$ i% F5 Q7 M6 t
- break
3 S7 J. H. _, a2 V; Q - 2 s' o8 x$ ]- t7 N# j( n# o M
- print('[0]:')
3 D7 Z% L4 v7 T1 A - for i in range(1,len(entry_0)):& Q' i. h& w7 W5 d" u4 {' J8 O# t7 B' C
- print('%d' % (entry_0[i]))
" m3 K% {1 R9 r; x ~5 A. j - print('entries: %d' % np.sum(entry_0))$ L/ g( M- W* m5 i$ t. r$ H
- print('\n')
2 \. r+ w. [6 `' ~9 A# x | - * k/ s! a* e: J- P8 X) t
- print('[1]:')1 f% g _ C. N/ @, a
- for i in range(1,len(entry_1)):
3 |# N0 z$ Y6 f, C9 ?9 D8 E X: x z - print('%d' % (entry_1[i]))% z: e/ K8 t/ l5 B% {2 }2 {
- print('entries: %d' % np.sum(entry_1))7 E* G; ^9 R3 c0 E& s" R
- print('\n')( M) H- D8 D1 J ]- E1 i
- 8 s* U# j2 ?% ]9 H0 Q
- print('middle high:')! k% c( b' T1 t3 @$ k- j |
- for i in range(1,len(entry_middle)):8 M. j8 a6 M8 M" j9 g* \' I
- print('%d' % (entry_middle[i]))6 d) V& V7 Z3 F5 o% `0 h
- print('entries: %d' % np.sum(entry_middle))% M" b; ~% h M0 x; H
- print('\n')
4 B# R6 d/ `4 O$ `+ z- ` - $ P: d$ V' F, T. q
- print('last high:')$ b' T3 s9 C6 j0 k" M% _7 z2 c( K
- for i in range(1,len(entry_last_high)):6 | }; n8 N0 B3 p" w/ `5 y$ _
- print('%d' % (entry_last_high[i]))
. V" n% X" S1 l2 \, ]) c. W - print('entries: %d' % np.sum(entry_last_high))
# Z' P1 P! I# z2 p P - print('\n')
9 \( b( B7 V1 y! m) j( a7 a - 7 w+ ~1 y9 ^) U. P/ g
- print('all entries:')0 \4 y& }# Z4 v/ |
- print(all_entry)
5 r: ~ k; E k* D/ _2 `0 V - ; R4 ?; s/ H" e7 n
- f.close()
复制代码
: ^( t/ |) y; h- T$ k9 X5 i
5 B6 ~5 w, t% q最后将 Python 输出结果进行数据可视化: }7 s3 z3 Q9 ^6 Z3 \5 z
|0 L4 b" I7 r6 w0 [4 s' l
. w8 `* P3 d9 d0 j! q4 S5 t/ k6 q9 n1 w" u) \
4 d# Y: `; a0 o1 T/ c以及饼图:4 E- t6 z% ~5 J( D
8 R8 W( \0 [* h3 `* f( r$ @% w1 E
可以得出几个结论:* D2 m- f7 p+ c! C
1. 尾高型的单词很少(约2%,大部分在2拍和3拍的单词上,2拍和3拍五五开,总共约1300个单词(在7万多个单词中)。
+ [! ? Q t9 r0 h1 L) K2. 头高型的单词次少(约17%),主要集中在3拍的单词上(约51%),2拍和4拍都约占20%左右。# t! E( |( L; ^8 c6 A Z7 ^( k
3. 日语中4拍的单词最多(约42%),并且相当一部分(约72%)是平板型。这和新标日中入门单元里,“声调和语调”部分中“声调”小节里的解说是一样的。, r( S c/ U3 T* o8 @0 M
4. 记忆平板型和尾高型的单词时,单词本身发音规律相同,都是前低后高,但后接的助词音调不同,不好记忆。但通过上述统计,可以这么做:(两拍以上)尾高型的单词单独记忆后续助词的音调,其后续助词的音调总是低的,而在一般情况下,一个单词(两拍以上)后接的助词的音调(高或低)和该单词的最后一拍是相同的。一拍的单词完全不符合这个“一般情况”,只需要记住这一拍本身是低还是高,再根据“一个单词中第一拍和第二拍音调必定不同”来确定助词音调。单词本身的音调则通过多听、多用以形成固定的记忆。
$ C" E& ^' z6 J0 V+ _' [" h! x3 u: i' h( O) i
R5 E, Q! }0 k& \$ r
- N6 {: }8 q: B! ~9 V$ j. f9 C6 { X) b& q
" Y- b- a3 H5 `9 W2 q" J/ s
e$ n y% {0 [) M ?% J1 O1 v$ n: ^& ]; R2 w
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?免费注册
x
评分
-
2
查看全部评分
-
本帖被以下淘专辑推荐:
- · 词典制作|主题: 217, 订阅: 40
- · 语言态度|主题: 150, 订阅: 19
|