TA的每日心情 | 开心 2023-3-10 21:15 |
---|
签到天数: 1329 天 [LV.10]以坛为家III
|
本帖最后由 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- #!/usr/bin/env python
+ L# Y& Z8 _% ^ - #_*_ coding:utf-8 _*_
$ i5 ~- \* e9 s9 o6 d& G9 e
3 V, f$ p! l1 B, o- import sys,os! Y2 D9 F9 f/ ]& l: f
- import numpy as np
5 ]/ Z0 d. k& O# \% f% ~1 T
0 r3 r) C8 y2 T8 N* l$ G- o- # 带有音调标记的词汇数目
* d! _3 q5 c9 A; t& V( X - all_entry = 0, h. Y' t, }* k0 P" w) x" o
3 r; d/ _7 r- X$ B0 s7 d/ [/ B- # 平板型,[0]
) L% O) ^- c1 D; H$ v - 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 - ) m h' S: d: I s. r8 J& a
- # 头高型,[1]) M0 d( L2 d7 w2 O- I
- entry_1 = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
- I/ n& {$ A5 h
0 Q; C0 f ~1 v9 N4 `- # 尾高型,[x] = 拍数
- S$ Z s$ A, [) T/ f" X - 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; [
. \6 I/ B- @6 q! m! ^) E& X% Y6 m- # 中高型,[x] < 拍数0 _- {1 \2 V/ R; A
- entry_middle = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
H; O/ w$ g; S+ l - 3 [. `# X# D9 R: p+ S
- file_name = sys.argv[1]/ Y. V, P% r1 S& m: L. o
- f = open(file_name,'rb')
7 P5 M$ F# u2 F5 @4 G - for line in f:
! F) H- h; F2 M. F4 k! D - line = line.replace(b"\r\n",b"")( @+ N5 d) m7 Z9 a) P
- line = line.decode()+ @5 J0 S# h; C! `1 L
- db = line.split(',')9 U4 M* J1 J0 {4 x/ }
- word_len = len(db[0]); p& w7 K) D" \- _
- if word_len < 16:7 g2 k8 x3 W. f1 g x" D
- all_entry = all_entry + 1
7 @- k7 ~' Y' H- U, ^/ u. z - for i in range(1,len(db)):, V) K( V+ ~9 ?( a3 h- ?- ?
- accent = db[i]. H, {2 [; o6 w8 Y* \; f
- if accent.startswith('['):
$ W0 o4 |7 p& s5 c3 Y) j - integer = int(accent[1])6 q7 c& j `7 c* o- K
- if integer == 0:
8 J, P" [6 r7 O2 D5 D - entry_0[word_len] = entry_0[word_len] + 1. S' i: U( E6 R' v2 _! [# B* e; R
- elif integer == 1:+ J: ~$ x5 G2 @, K
- entry_1[word_len] = entry_1[word_len] + 1+ X& h& I" ^# |
- elif integer == word_len:
# \4 ]1 A' p* P. x+ q0 |" Y' {& a; A9 D& G - entry_last_high[word_len] = entry_last_high[word_len] + 1/ Z6 |; l; k" s! t
- else:
" Z# {5 w, Z$ V( \( r* L - entry_middle[word_len] = entry_middle[word_len] + 1
; \( u' T. l R8 E7 a& T - break
C" D' x: m% Z+ r8 I3 `; ^) b; y - ' @1 b1 i7 t, Y4 k
- print('[0]:')8 S) P1 Y3 Z3 ?! r" z1 u# M
- for i in range(1,len(entry_0)):/ m6 `( R3 F& J1 s4 x0 o) b
- print('%d' % (entry_0[i]))
2 i Z) W3 ], j3 h4 g4 Q - print('entries: %d' % np.sum(entry_0))% Q3 V$ e: n# }2 q$ O
- print('\n')
+ N6 |+ N5 W& i - 5 f1 M( A/ n& b3 ], o+ u& k
- print('[1]:')
& Q8 W( z; c. d# b- i* @9 i - for i in range(1,len(entry_1)):0 j8 s' M3 N" W0 {2 H
- print('%d' % (entry_1[i]))
* X& h. K: Z) K; A5 [ - print('entries: %d' % np.sum(entry_1))$ |4 s* k, X7 O/ y
- print('\n')( Z5 i4 O# t0 E5 [3 x, J
- 5 x# h. c) o& ^, |. n
- print('middle high:')
; R, h3 \5 F/ \: S' {4 N - for i in range(1,len(entry_middle)):
4 Y3 ?8 C, |1 l; N3 h9 a) p- R - print('%d' % (entry_middle[i]))' ]7 V( n# |2 \. P2 } d
- print('entries: %d' % np.sum(entry_middle))
! f1 D: j" D0 O# b" a - print('\n')
1 G Q [; a. Y$ N: j" a
$ d4 g, X& r: H- print('last high:')
" J: o8 ?: y- K T0 d& ? - for i in range(1,len(entry_last_high)):
# d, P, `3 Q# W9 q3 S- Q2 Z6 z% o - print('%d' % (entry_last_high[i]))- t* ]2 O8 B h7 V) O Q
- print('entries: %d' % np.sum(entry_last_high))+ `; E: c( i7 j8 o
- print('\n')3 j3 k" v8 a5 u' m
- : \6 o& I" S, f3 F9 ~ m
- print('all entries:')( }/ X. L) w, s5 i# M4 U
- print(all_entry)
+ a) P5 R9 h0 K5 p+ ]9 t6 \' w - J1 W, V; c( Q6 q/ a
- 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
查看全部评分
-
本帖被以下淘专辑推荐:
- · 词典制作|主题: 217, 订阅: 40
- · 语言态度|主题: 150, 订阅: 19
|