TA的每日心情 | 开心 2023-3-10 21:15 |
---|
签到天数: 1329 天 [LV.10]以坛为家III
|
本帖最后由 enjoy了哦 于 2019-3-23 23:23 编辑 : q- u! v4 _2 M7 F$ {+ d- ~1 W
3 Q a: f |7 o# g% P通过调查日语单词中音调类型的比例,可以得出一些结论,方便记忆单词本身和其后续助词的音调。9 `) R3 s% `! B( W4 V% U0 e/ O0 S
) ^3 F" j0 |% b2 L# U原始数据:新明解国语辞典第5版(EPWING格式)8 m+ W. d" S( ]: z- t
首先通过 EBDump 打开该EPWING格式词典的文件夹的 HONMON 文件,导出其中的“前方一致表記形見出し”部分,选择全部的1412个block。# X d( M! j" ]: U" E! z; H9 \( w
$ R v' a* }* ]7 H& O# v
/ s4 H$ E$ ]- ?, U$ v/ X# z1 [- R/ a4 t& }导出后,将该文件转码成 UTF-8 格式,并使用正则表达式替换部分内容,使其容易被后续分析处理。1 M H7 L( B# U- h: Y2 L
+ A( B4 Z3 E0 y+ H
4 }- j" }: P% t* ?为统计尾高型音调,需要知道每个单词的拍数。由于拗音占有两个字符,但只算一拍,为了方便统计,将其中的小的[ゃ][ゅ][ょ] 及对应的片假名(还有小的[ア][イ][ウ][エ][オ]等,外来词专用音节)去掉,即[きゃ][きゅ][きょ]中后面那个字符。这样一来,拍数就等于字符数了。
- Q$ }7 g. C0 o( O/ i% K! l5 ?9 A& w% B* a* [
最终的经过清洗的“干净”的数据如下所示,根据个人的习惯进行处理:6 M2 w& m+ H4 F8 Y9 e: _
& j( z8 L& a* b n5 f% w: |
0 T6 t) Z' L# q9 Y然后可以通过 Python 进行统计,一个单词可能有多个音调,但只统计第一个音调(稍微改动源码可以统计所有的音调)。这个代码可以用来明白大致的统计思路,后续还有写零碎的更改,并没有体现在这里面。
; s q' @9 D6 M- #!/usr/bin/env python9 R8 ` Q8 y: w! z
- #_*_ coding:utf-8 _*_( e, P8 H9 H& n
- 5 d9 s/ R4 a5 v2 z2 }! O% `
- import sys,os# r2 A' E8 i8 I. L! J3 [! f
- import numpy as np0 o% l1 q' ?* t! @ c
, ? b: _, _# M' m/ t& Z- # 带有音调标记的词汇数目
+ v" c) ]# M' M% } - all_entry = 0
$ [0 s( A7 I+ R4 _
0 y8 G& {1 V( m- s- # 平板型,[0]
* B3 Z2 c& ]. W2 x* f. G - entry_0 = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
3 j/ Q1 Y. z+ j. e5 w
9 z Z2 p% X, F5 x) i4 U- # 头高型,[1]
3 j3 L; _9 i$ S U1 z - entry_1 = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
: [' Z( t, h9 E1 X
7 h0 v6 q" v5 w0 v- o! y5 e- # 尾高型,[x] = 拍数# f" s! ]8 a0 K1 r3 c2 S
- entry_last_high = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]2 e2 w/ C: S# V& R: V
. d; b$ I8 d: F: R' Y) F/ `- # 中高型,[x] < 拍数
# s+ i6 K* K p0 P; Q2 K# t' r% G0 R - entry_middle = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]1 W' c, [+ P P7 ]) u, H
, c/ i8 Y2 f( c8 n; c7 N) H- file_name = sys.argv[1]
& W+ [4 _& ^8 ^' A, \7 W - f = open(file_name,'rb')- c; J8 g1 j# ^' h5 X
- for line in f:& ?, h6 u4 V3 D& ~: J8 p. [0 ]7 T
- line = line.replace(b"\r\n",b""): ?7 i5 ]- k8 ^9 n7 E( {! ]& U
- line = line.decode()
/ P {* m# H5 E v3 E - db = line.split(',')+ ^8 t3 s c( Q: j4 C( K
- word_len = len(db[0])
" @, F$ y% y! R: d6 b - if word_len < 16:
1 C+ a+ ?9 G# s: }; U0 R - all_entry = all_entry + 1
. i% [ e. v) L9 |: u - for i in range(1,len(db)):% O% _+ b. ?" k6 f' ]8 U) V: C
- accent = db[i]
+ d8 J1 W6 J' L$ V) q1 j - if accent.startswith('['):
7 O: ~; w0 `" P" P& ~ - integer = int(accent[1])# d$ u/ y+ S0 q- e2 t' P/ q
- if integer == 0:
! c; {! E) v' I6 k - entry_0[word_len] = entry_0[word_len] + 1
$ {$ ]; b0 t% x7 Q" ? - elif integer == 1:
$ Y. o0 T# e+ T1 G3 I- N0 K+ s: s - entry_1[word_len] = entry_1[word_len] + 1
. y; D* o9 Q8 c6 P U - elif integer == word_len:3 H! h0 \3 @$ I
- entry_last_high[word_len] = entry_last_high[word_len] + 1
/ E: c* Y/ a4 U8 I ?: q - else:. v* y; \3 d3 a S( n
- entry_middle[word_len] = entry_middle[word_len] + 1! c2 e& |. i+ ?: |3 d
- break
+ c& g, k/ e5 v! C8 p* q1 X - $ p! O" x, f* D1 @5 l; s9 K
- print('[0]:')
2 l* C! l7 _& d9 g - for i in range(1,len(entry_0)):" k" t6 M$ p. I; y2 e
- print('%d' % (entry_0[i]))% H+ w- I) M/ a5 A3 h4 z9 c" M
- print('entries: %d' % np.sum(entry_0))& q* D- W0 t& M/ m4 e# Q
- print('\n')
) Y% c$ }1 E7 Y
/ ?# w/ o1 T" ?$ N1 Z$ ~- print('[1]:')6 ^0 w: [) F3 ^" h
- for i in range(1,len(entry_1)):2 `( o% a( l3 X' ]0 X) [& D
- print('%d' % (entry_1[i]))
# s' _" [2 c; A+ Z( p1 Y* O; j - print('entries: %d' % np.sum(entry_1))
/ e8 H' h q& b6 v6 J- w! \+ \ - print('\n')! b- @; N5 Q$ {* P0 Z9 l, F
l, e* X, t* X+ D) }- print('middle high:')# D/ z U; I7 _3 O# s
- for i in range(1,len(entry_middle)):
0 M+ c- s* C2 E, [, y3 j - print('%d' % (entry_middle[i]))
/ X* }# O, X% D& h" c) \ - print('entries: %d' % np.sum(entry_middle))
1 S" \/ w1 R/ J - print('\n')
- {& w0 @ b$ r- H3 \& b0 _ - * _2 J% O3 F/ b" i
- print('last high:')
0 I- g9 p: y* D; R - for i in range(1,len(entry_last_high)):8 n8 H U; p/ ]* A2 I+ z" L
- print('%d' % (entry_last_high[i]))
6 z0 ]- [( o* R3 w# ^) u0 z - print('entries: %d' % np.sum(entry_last_high)). o# ?/ ?$ I2 k' h: {
- print('\n')
; N0 ^4 E1 J& M1 U - ( b/ U3 c% ^( o0 H8 A0 M+ |6 K
- print('all entries:')! V1 y0 ~2 t4 n1 Z' t/ j8 z7 F" A
- print(all_entry)
2 d5 m6 T" m# R' u& D5 s; ^ - 4 K/ J8 q' F% _0 _& a9 T6 V
- f.close()
复制代码
% B: a: Z, Z( `& @
8 u# P! @# Q8 R- s最后将 Python 输出结果进行数据可视化:. B- Z$ n0 Q6 [( l' x% e* p
( K% H, j0 y6 a" M& t2 A
( l* q: X' Q0 ^4 r
" F% @' p+ F! p- x0 l
@3 X% d- q) q- v) _以及饼图:
" o$ P8 k& e$ m8 N
6 r9 Z0 z2 g' |- T' G4 S+ p+ y# @" [7 d; h2 R
可以得出几个结论:
0 n- m F+ K. |: B1 Y1. 尾高型的单词很少(约2%,大部分在2拍和3拍的单词上,2拍和3拍五五开,总共约1300个单词(在7万多个单词中)。! {. R, |: }5 O& j( [" ?3 L
2. 头高型的单词次少(约17%),主要集中在3拍的单词上(约51%),2拍和4拍都约占20%左右。
, p% I" a$ r3 I( Y1 S0 _3. 日语中4拍的单词最多(约42%),并且相当一部分(约72%)是平板型。这和新标日中入门单元里,“声调和语调”部分中“声调”小节里的解说是一样的。$ K7 g6 f+ M1 X. |3 n4 O" G
4. 记忆平板型和尾高型的单词时,单词本身发音规律相同,都是前低后高,但后接的助词音调不同,不好记忆。但通过上述统计,可以这么做:(两拍以上)尾高型的单词单独记忆后续助词的音调,其后续助词的音调总是低的,而在一般情况下,一个单词(两拍以上)后接的助词的音调(高或低)和该单词的最后一拍是相同的。一拍的单词完全不符合这个“一般情况”,只需要记住这一拍本身是低还是高,再根据“一个单词中第一拍和第二拍音调必定不同”来确定助词音调。单词本身的音调则通过多听、多用以形成固定的记忆。
! G5 U& g' s) `6 s8 ^5 S: |8 \, U7 x. ?
! G) S- p$ g( e& E0 W5 k+ \
+ j% g- b7 \/ _
" m0 G$ v% R5 Y! |$ C1 k8 W1 V5 G4 X4 X6 y5 J
2 q( n$ o. c* x. g/ A9 Y% y+ C
8 L6 d5 X* a0 B4 x
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?免费注册
x
评分
-
2
查看全部评分
-
本帖被以下淘专辑推荐:
- · 词典制作|主题: 217, 订阅: 40
- · 语言态度|主题: 150, 订阅: 19
|