TA的每日心情 | 开心 2023-3-10 21:15 |
|---|
签到天数: 1329 天 [LV.10]以坛为家III
|
本帖最后由 enjoy了哦 于 2019-3-23 23:23 编辑
2 w! N9 _) [+ d" m8 b( d
8 I( S1 D. N; B0 T通过调查日语单词中音调类型的比例,可以得出一些结论,方便记忆单词本身和其后续助词的音调。
# t+ n5 f5 e5 W A$ j4 X% I, M
' Y: _; m* A( R4 Y原始数据:新明解国语辞典第5版(EPWING格式)$ J/ d$ y) D3 A
首先通过 EBDump 打开该EPWING格式词典的文件夹的 HONMON 文件,导出其中的“前方一致表記形見出し”部分,选择全部的1412个block。: K7 C* L0 o, Y: U# |. L
/ I& n" j) S2 o
0 T7 X" ]- {& ]! i/ M" H导出后,将该文件转码成 UTF-8 格式,并使用正则表达式替换部分内容,使其容易被后续分析处理。
1 g/ g0 R0 O z$ Z. n* h0 t8 ]% x8 V2 {/ u' _$ s# v
1 a r( d! P/ j% q2 V8 [( k* x
为统计尾高型音调,需要知道每个单词的拍数。由于拗音占有两个字符,但只算一拍,为了方便统计,将其中的小的[ゃ][ゅ][ょ] 及对应的片假名(还有小的[ア][イ][ウ][エ][オ]等,外来词专用音节)去掉,即[きゃ][きゅ][きょ]中后面那个字符。这样一来,拍数就等于字符数了。2 @- W4 @3 ]9 ]: d3 Z4 q
6 G. r6 {+ t7 V: d最终的经过清洗的“干净”的数据如下所示,根据个人的习惯进行处理:( K' h# c ^: X& T8 [4 O1 m# |
" c& }: D9 k! s+ {" X
* v5 }2 i( o v3 J0 `8 Z
然后可以通过 Python 进行统计,一个单词可能有多个音调,但只统计第一个音调(稍微改动源码可以统计所有的音调)。这个代码可以用来明白大致的统计思路,后续还有写零碎的更改,并没有体现在这里面。
1 \! u( K/ e( B' e- #!/usr/bin/env python7 \% b4 p7 }8 f6 y4 d5 L
- #_*_ coding:utf-8 _*_
8 H. d3 i# e" D. e9 ^ - 2 t6 ]1 b3 G3 ~4 O+ W% C. W7 i
- import sys,os3 M2 p' F& Q5 |$ j+ s$ a
- import numpy as np0 C# L9 ?& b; o4 e) c6 D
/ v3 _3 g- y/ D; v) I- # 带有音调标记的词汇数目0 a. V3 q' O* l2 S1 n r2 h. r) [
- all_entry = 0
/ Z( N' d. E7 y, ` - # M# B# R+ W) P2 ^
- # 平板型,[0]; Z7 z, U' w# |( e/ m
- entry_0 = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]7 t9 S9 q7 a) h# B. K! z
- - A. w1 v. H9 d1 ~3 ]" _
- # 头高型,[1]1 H8 M9 a; c: j5 w9 ?! s
- entry_1 = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]2 s; O, ^- q, c; R
, t, v' q3 T" y/ g+ ]; L- # 尾高型,[x] = 拍数' c" U$ c. _) Q
- entry_last_high = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]* [, K# j( j$ `7 T1 p* T& \$ w
- 3 e7 a, O6 m/ c0 I, ~( u8 j* i9 B& V
- # 中高型,[x] < 拍数
3 H2 y" W+ {: Q, m& @ \ - entry_middle = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]/ }8 w- W7 C% ?8 Q: c4 s( K1 j2 }; _3 S
& n9 z3 q0 {+ z; c% Q' X- V0 `: Z- file_name = sys.argv[1]0 R# B, T1 k( Z" o# h, m% F
- f = open(file_name,'rb')7 j$ u& e: g& r* ]. k) s
- for line in f:
( }& P0 w$ m! }4 x0 n' _ - line = line.replace(b"\r\n",b"")" A5 c+ G: n, m. U4 r1 D
- line = line.decode()
' p u/ X' H8 ~ ] - db = line.split(',')
) r0 m# x7 }' m! Q( [# ]8 t' C - word_len = len(db[0])
9 L/ h) N2 G/ V4 s( L - if word_len < 16:3 T8 u/ t. k/ z/ Z; m: f
- all_entry = all_entry + 1& T7 }4 a0 K" [' H. E
- for i in range(1,len(db)):3 {! U! x7 G4 d3 i; M4 C
- accent = db[i]+ _" [% L0 m$ b% b! P
- if accent.startswith('['):
+ T' P" w8 E* \0 }1 F - integer = int(accent[1])
; E* A5 Q" g- ~5 _' I" B6 f - if integer == 0:
5 n; X2 C/ ]( J# b+ `% Q8 Z - entry_0[word_len] = entry_0[word_len] + 1
* j5 u! h6 [# T; L3 z+ S3 J - elif integer == 1:: w+ t- n( u1 j6 E* b5 e
- entry_1[word_len] = entry_1[word_len] + 1
/ \3 K; F3 g% X9 D2 j0 v - elif integer == word_len:
& K% n6 n$ o( Q& O - entry_last_high[word_len] = entry_last_high[word_len] + 1
' N& T4 C* S6 Z8 I9 i' T' W# S6 L - else:
R7 a5 b! [- K7 g - entry_middle[word_len] = entry_middle[word_len] + 1
% t l+ M0 S* M" m4 u - break: E7 r2 b$ ^4 H7 T) F! b7 c6 m7 O
4 l9 G# V1 c# z- print('[0]:')
! x) J8 o7 J8 C e - for i in range(1,len(entry_0)):
" s5 p$ t; N' d" D - print('%d' % (entry_0[i]))% L+ r z$ a3 G
- print('entries: %d' % np.sum(entry_0))
! g6 M3 X P C& d - print('\n')( R/ ?/ y4 S" [! b) F J) ?8 H0 j W, ^
- # k3 w) @; r) \" a
- print('[1]:')! K/ G7 O4 t q" X& g
- for i in range(1,len(entry_1)):! w- d, o9 b1 R' ~
- print('%d' % (entry_1[i])) O2 p1 M- \9 `$ h& O
- print('entries: %d' % np.sum(entry_1))9 U/ M" S% j. p- y
- print('\n')
$ B( ~+ g7 i9 U3 U( m6 P) `" e - / N( Z5 i+ I3 Z% V3 [3 p* X! `9 p+ z- Y
- print('middle high:')6 E7 F; W. F' D& {- k6 R, `) z
- for i in range(1,len(entry_middle)):
3 A% `' p: Y8 l% k) v | - print('%d' % (entry_middle[i]))# f9 Y3 i: g E- t, f4 g I# x J
- print('entries: %d' % np.sum(entry_middle))2 p% v$ l* S- h+ g+ \
- print('\n'): C3 k: N. C/ r4 b% L/ h6 B N
9 q9 E4 R# t0 _) C+ j% B5 @6 j, G# c- print('last high:')2 c. _$ j6 |: _
- for i in range(1,len(entry_last_high)):' c2 r9 I( |' d& G) k6 l
- print('%d' % (entry_last_high[i]))+ j# \3 [* O% G3 o9 v
- print('entries: %d' % np.sum(entry_last_high))
) g y% ~1 s) S5 ~5 k1 k9 J# K - print('\n')
" F& D. i9 q0 N
. l, {; w% s3 v3 p V4 n% R v; g: x- print('all entries:')' y3 Z# F4 G5 h0 b* f/ D6 h5 ?4 L) F
- print(all_entry)! Z" `8 Q+ g4 Q
5 R2 a# [ K4 e1 p/ Q- f.close()
复制代码
- f5 u7 i: w( G% S! |8 H$ Q& B5 e
# w. s7 I, d8 g+ j4 [2 M最后将 Python 输出结果进行数据可视化:/ w" D2 h; y, h5 w2 |
& N% ?/ ~2 |6 g- h6 z" D" I" X! F
3 p% ?1 o9 l W7 j+ K
/ T7 P7 _8 M! Z
" w. K7 g# S0 Z/ ]" v' h& \以及饼图: F6 {4 l: }% X( M0 `; C) M
/ ?3 M9 U! J, [7 s \0 N4 L( G6 H3 s! v. g3 w
可以得出几个结论:" v4 {8 ^ f% s, o, S2 X
1. 尾高型的单词很少(约2%,大部分在2拍和3拍的单词上,2拍和3拍五五开,总共约1300个单词(在7万多个单词中)。
+ ?7 u$ [ a1 d2. 头高型的单词次少(约17%),主要集中在3拍的单词上(约51%),2拍和4拍都约占20%左右。& w" o" u: w) v6 m
3. 日语中4拍的单词最多(约42%),并且相当一部分(约72%)是平板型。这和新标日中入门单元里,“声调和语调”部分中“声调”小节里的解说是一样的。' y4 R% i, g) r: i# n) \5 U6 L& F
4. 记忆平板型和尾高型的单词时,单词本身发音规律相同,都是前低后高,但后接的助词音调不同,不好记忆。但通过上述统计,可以这么做:(两拍以上)尾高型的单词单独记忆后续助词的音调,其后续助词的音调总是低的,而在一般情况下,一个单词(两拍以上)后接的助词的音调(高或低)和该单词的最后一拍是相同的。一拍的单词完全不符合这个“一般情况”,只需要记住这一拍本身是低还是高,再根据“一个单词中第一拍和第二拍音调必定不同”来确定助词音调。单词本身的音调则通过多听、多用以形成固定的记忆。
5 [4 ~4 Q" d5 }+ d6 M- F
/ D- b% T* [, k
& @ ~) s- r1 g. o1 H% @5 L, x6 W) ?4 b7 L
7 d1 H2 R: H! y3 Q$ P9 X& L9 K& E9 y* T! H% r0 z. }8 {1 S
# c, Q: [- t& g- H6 w* o+ ?! a+ l3 W7 I" N
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?免费注册
x
评分
-
2
查看全部评分
-
本帖被以下淘专辑推荐:
- · 词典制作|主题: 217, 订阅: 40
- · 语言态度|主题: 150, 订阅: 19
|