TA的每日心情 | 开心 2023-3-10 21:15 |
---|
签到天数: 1329 天 [LV.10]以坛为家III
|
本帖最后由 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- #!/usr/bin/env python
' b) `' C4 W& u6 D7 {4 W/ Z+ \+ x - #_*_ coding:utf-8 _*_
) S6 M& f: j8 p( c7 C; R
7 f6 }# H- y/ t" q/ k) P- import sys,os
3 r# q( K8 O0 k: M - import numpy as np
8 {, h9 Z) ~: t8 q, ] - 6 `4 G- [4 ^& X! m8 o
- # 带有音调标记的词汇数目
! K5 E' |: @: c# [0 L& C2 T9 o - all_entry = 0
9 Y- Q1 f1 B; ]8 ` - - U' v; L R5 z9 Z. O3 d" R
- # 平板型,[0]% M$ w+ [. p8 r' F* @* R0 @
- 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& ] - ! U) @1 K0 t8 Y7 t
- # 头高型,[1]
# J- \7 ~3 g* t$ @# l - entry_1 = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
) i6 H3 B- F; d9 Y
& K+ v: c+ h6 k) N( V; R- # 尾高型,[x] = 拍数
% `( u9 q* Y& {( n: N+ s9 o% ?1 p - 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
- X2 z1 N/ P: w# f- # 中高型,[x] < 拍数
. d( A% `- X1 h3 V) M - 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
- " l ^/ t1 ?3 u5 U% L# X7 [
- file_name = sys.argv[1]
' c8 q$ e. g F# A( p, R. o! r# _ - f = open(file_name,'rb'); q8 s6 V5 `6 n7 e; U1 K6 G! V. f9 u. B
- for line in f:
$ \ J8 w! U( B0 f3 H; C - line = line.replace(b"\r\n",b"")
0 u& l) \% e7 ~/ L; Y: w) x - line = line.decode()6 n- M% K/ x8 u0 T' a. q' d% r8 v. ?( C! \
- db = line.split(','); P$ J6 h7 ~3 L$ r+ t
- word_len = len(db[0]); p: [8 [& Z4 Y0 x4 M
- if word_len < 16:/ o$ D- B, X: J( N6 {$ F
- all_entry = all_entry + 1" r7 J9 C" z- I' k- @; d) v }* S2 i
- for i in range(1,len(db)):
* O C# O3 W. u$ Y/ e4 W - accent = db[i]
0 c) `8 H a' m9 x - if accent.startswith('['):6 W- Z+ M- L9 M5 N& Y7 m' b9 }
- integer = int(accent[1])
% s5 g6 p5 L; Y% }8 e4 @ - if integer == 0:
/ o8 ~1 h: w! v - entry_0[word_len] = entry_0[word_len] + 1
3 A7 m) ?" g" @- H. i6 T' {; w - elif integer == 1:
6 O% p3 |% V- O) Q' }# i - entry_1[word_len] = entry_1[word_len] + 1
5 O- u, e9 f9 u: o& G" Y - elif integer == word_len:
# p3 m& u/ b+ v: ], h+ q$ c! k - entry_last_high[word_len] = entry_last_high[word_len] + 1
% R) ]1 d; O7 u+ W( ] - else:
* T- C9 d; M0 j5 k2 I8 E- U3 W - entry_middle[word_len] = entry_middle[word_len] + 1
8 ~ x0 Q- w L3 Y/ J- D& B - break, l6 n$ h2 i3 x% ]
- 8 W" @" V. m/ f! ]7 s; p9 z
- print('[0]:')
. w2 y! l: p) {/ N. Y7 k4 m- y3 L - for i in range(1,len(entry_0)):
6 Z$ `7 ~! f( z% `8 z+ u1 A - print('%d' % (entry_0[i]))4 b# X1 O9 A: N6 L" V
- print('entries: %d' % np.sum(entry_0))& o4 f9 v6 k* N
- print('\n')
h( x+ t* m0 _' P# B
0 N/ G5 M+ x1 f6 E* X: C8 f- print('[1]:')6 S* D6 T* B5 p; H7 M. U) r
- for i in range(1,len(entry_1)):1 Z' R; ~* V6 t; o& z6 ^% r9 c
- print('%d' % (entry_1[i]))
n% |( g; M7 z# `$ x* I4 k5 x - print('entries: %d' % np.sum(entry_1))
7 v% }* F, F8 S( M0 R1 k! w" c e% B - print('\n')) e" ~" L5 t. [+ q. P
5 z+ x6 f- a' ]& B: N, g- print('middle high:')
( g2 z. c) d$ t% }$ G8 N# u6 [ - for i in range(1,len(entry_middle)):
/ K: d% Y t4 i& ]; \( O - print('%d' % (entry_middle[i]))
7 R: o" p e K8 Z - print('entries: %d' % np.sum(entry_middle))
/ l$ C. V# c: b" T& |/ M! K$ p - print('\n')
5 l; ^8 K. A% c5 K! w - L9 D2 W5 N$ C5 B2 b: D
- print('last high:')$ j& K; M/ { N9 J5 k" U
- for i in range(1,len(entry_last_high)):0 X$ z+ R% b8 n( u
- print('%d' % (entry_last_high[i]))
1 v& c7 |5 O* R3 j2 R - print('entries: %d' % np.sum(entry_last_high))6 W+ U9 Q# ]( H' y2 U5 @; X: O
- print('\n')# r$ l2 f7 O0 c l3 u6 I# c
- - r% U5 h6 ]! s9 R" L. \) j
- print('all entries:')4 C8 v' y1 @# k4 \& D+ C
- print(all_entry)
- l9 I$ ]: j" P, X# I2 ] O0 v
) Q' V! y( W2 J5 ^ S- 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
查看全部评分
-
本帖被以下淘专辑推荐:
- · 词典制作|主题: 217, 订阅: 40
- · 语言态度|主题: 150, 订阅: 19
|