TA的每日心情 | 开心 2023-3-10 21:15 |
---|
签到天数: 1329 天 [LV.10]以坛为家III
|
本帖最后由 enjoy了哦 于 2019-3-23 23:23 编辑 0 Y! m2 S$ c" f4 G3 i& j) n& ~
0 t4 T, k- a+ B' i) [! \. u
通过调查日语单词中音调类型的比例,可以得出一些结论,方便记忆单词本身和其后续助词的音调。. ~% i, T1 G3 H4 c i1 ~
2 D, N- G# t; B- M) P n \
原始数据:新明解国语辞典第5版(EPWING格式)$ f: \% I: ~" V0 @* G
首先通过 EBDump 打开该EPWING格式词典的文件夹的 HONMON 文件,导出其中的“前方一致表記形見出し”部分,选择全部的1412个block。; A4 Z) O) `9 F5 u7 S8 b5 }
6 s* C' @. v) J) k
: ^. I' w2 E8 E# n& O" y! H( ] y导出后,将该文件转码成 UTF-8 格式,并使用正则表达式替换部分内容,使其容易被后续分析处理。( d8 g* @% J# L1 B& l
- e6 ?% ]8 D# N
3 G F5 U# q" |- r/ \1 m; ]9 U8 z- I为统计尾高型音调,需要知道每个单词的拍数。由于拗音占有两个字符,但只算一拍,为了方便统计,将其中的小的[ゃ][ゅ][ょ] 及对应的片假名(还有小的[ア][イ][ウ][エ][オ]等,外来词专用音节)去掉,即[きゃ][きゅ][きょ]中后面那个字符。这样一来,拍数就等于字符数了。7 Y! F1 @8 R1 ?+ X" F3 W3 \
; B- k0 r4 a: `4 C6 r. U2 ~
最终的经过清洗的“干净”的数据如下所示,根据个人的习惯进行处理:
6 Z& Q5 R, |( X7 x7 {3 k0 l- s
$ h: {$ x6 M& ~: f6 l
. M7 u" R. g- x- A" v6 h然后可以通过 Python 进行统计,一个单词可能有多个音调,但只统计第一个音调(稍微改动源码可以统计所有的音调)。这个代码可以用来明白大致的统计思路,后续还有写零碎的更改,并没有体现在这里面。
5 B' f3 G S2 y9 P3 k/ E5 Y- #!/usr/bin/env python
% b( }) b& |3 i0 \ - #_*_ coding:utf-8 _*_9 k6 {. V; P& D3 @
- * A1 S# [( C2 {5 n# N* V3 W9 a% z8 n
- import sys,os
! @2 b4 P0 G- ]. K) \ - import numpy as np4 s, [# @! T) U% A1 j6 Y
- 3 c# l* @0 N m* r& B& `( W) u
- # 带有音调标记的词汇数目
- Z( K* H7 i+ R: r4 F - all_entry = 0
& \, t' f/ _* \) i2 b2 Y# D* G4 n
& L! V) [) B* A) P* h& F- # 平板型,[0]
' x+ i& g; A3 X4 K - entry_0 = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]9 \8 K9 J8 f- b7 t$ t' N2 c+ g
- 3 T- r) B( _) w
- # 头高型,[1]
0 {. K2 b* b9 y3 W% {1 ^ - entry_1 = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]+ _5 {7 y5 s; F2 a6 e8 E H
- ; y/ ]1 T, W5 w# C0 n! F' d
- # 尾高型,[x] = 拍数' Z- o: u5 G; L# M
- entry_last_high = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]7 Z: k( w D, I" h! E
- $ D+ V0 m+ D- H# d
- # 中高型,[x] < 拍数
# T: Z6 @) e; V: c3 p( a" ] - entry_middle = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]8 T8 W3 l1 y; S' {& I( P' D
- " ~9 J @4 _1 X0 K' ~; U$ k
- file_name = sys.argv[1]& `% {& ~' P4 R- s
- f = open(file_name,'rb')
. l2 D1 f" p& d. C - for line in f:
" B# u2 p9 ^4 W5 a - line = line.replace(b"\r\n",b""): l+ y/ B( O& u
- line = line.decode()
* z# H" J, E ^" h4 Z2 w - db = line.split(',')# F+ W- z) F* d) Z6 q6 p4 o% E
- word_len = len(db[0])7 ]7 a+ w4 d! e/ z
- if word_len < 16:
! `) b" X# L# [0 X9 C/ V; x - all_entry = all_entry + 1" N6 q# F$ y3 x. g$ J2 W
- for i in range(1,len(db)):$ L+ x8 f- v) \* [& a: ~, A
- accent = db[i]
+ l3 Q( _) ^, O8 G/ N8 v - if accent.startswith('['):" _/ ~2 M" y) v+ c
- integer = int(accent[1])
3 C5 |3 n/ e5 { - if integer == 0:8 s& e. O6 s1 j0 q
- entry_0[word_len] = entry_0[word_len] + 1
% ~8 t% M$ e2 [( | - elif integer == 1:1 g; d, l9 b$ n2 Y! }/ i/ q
- entry_1[word_len] = entry_1[word_len] + 1! N# R3 M# F$ p& |# V! W% U
- elif integer == word_len:
- b( t1 A/ A2 d/ I9 ~, l- R! m" z$ H - entry_last_high[word_len] = entry_last_high[word_len] + 1
6 `) ?( n! z) h/ \( { - else:. C1 a! `* J. W* d
- entry_middle[word_len] = entry_middle[word_len] + 1
% N+ S) n, u" v! M2 {$ z - break. O9 l% l8 {# s1 x- v
- 5 n$ t0 k1 l8 ^, \* b7 A ]& U
- print('[0]:')
# f" Y2 n, w9 S F6 r. S2 Z9 {7 m - for i in range(1,len(entry_0)):4 @0 M+ a/ C) Q5 S+ \% |
- print('%d' % (entry_0[i]))* o! _ `4 u0 L- ]6 l' v& X! p
- print('entries: %d' % np.sum(entry_0))
; ?; m' i" V# i4 _) E' C9 Q - print('\n')
i! {7 {: V4 ]7 \4 }' n: |
& N$ U% n, C, V' Z3 a- print('[1]:')
1 w! P. a5 a) S4 u6 n - for i in range(1,len(entry_1)):, ~8 l5 |5 |% r, T8 l9 ^. a
- print('%d' % (entry_1[i]))
. \ X8 g2 }( M# M1 Z8 m6 j - print('entries: %d' % np.sum(entry_1))
& C* g; b: x3 j: U, J$ S- G - print('\n'), g, `! N7 D( `2 B
- ! i% Q4 \- [' q6 |. o. }
- print('middle high:')# u) t. i/ \: u/ }
- for i in range(1,len(entry_middle)):; }* V9 R7 [7 J( F% e4 r. U' ?
- print('%d' % (entry_middle[i]))( ]: B6 d/ U/ z2 b" ?5 t
- print('entries: %d' % np.sum(entry_middle))
$ G( _1 `3 Q+ s - print('\n')
/ v: u8 s& k% p' L+ Y6 Z M7 X4 Y% m& g
- ^* t# R- j2 A1 T/ R- print('last high:')
8 |* M; \/ q4 p. [1 W* R( h - for i in range(1,len(entry_last_high)):) d, |9 _' M& R9 c5 f$ F
- print('%d' % (entry_last_high[i]))5 w$ A, W1 f9 h7 y+ }
- print('entries: %d' % np.sum(entry_last_high))
7 w4 w# G3 i( x - print('\n')( c7 l. L! I9 i7 N$ X1 O
9 ~8 A) s& O7 p) P& P2 Q+ X: Q- print('all entries:')
5 c- G# w5 G& ?4 {! C2 y/ s; g - print(all_entry)* c! Y0 |! @4 D! t" b5 W
- 6 l/ ?7 ?, K4 D# P" s0 q- }
- f.close()
复制代码
+ \; R; ?5 {1 y+ ~& j
- V1 b- Y# z/ V |) Q) q最后将 Python 输出结果进行数据可视化:
2 O$ ~. l1 C9 S" @
, O4 z) | _+ P5 M) h( t. c% N5 d: w7 o4 s
! i' Z5 Z0 n% e+ O) \- B$ V' c
: O2 L1 b% `: J0 O0 L2 x! k9 u以及饼图:! Z7 l( ?: ~& Q' H) E
1 }6 J6 y' C/ a
2 ]( l0 ~+ I7 F+ a% J
可以得出几个结论:1 w0 v+ V) s; v% o
1. 尾高型的单词很少(约2%,大部分在2拍和3拍的单词上,2拍和3拍五五开,总共约1300个单词(在7万多个单词中)。% Y% B3 u0 r. ~( Y$ t7 o
2. 头高型的单词次少(约17%),主要集中在3拍的单词上(约51%),2拍和4拍都约占20%左右。
* \ Q+ k% o, Q( X4 ~3. 日语中4拍的单词最多(约42%),并且相当一部分(约72%)是平板型。这和新标日中入门单元里,“声调和语调”部分中“声调”小节里的解说是一样的。
& q5 M' w: E R3 h: w ~4 K$ D2 Z( @4. 记忆平板型和尾高型的单词时,单词本身发音规律相同,都是前低后高,但后接的助词音调不同,不好记忆。但通过上述统计,可以这么做:(两拍以上)尾高型的单词单独记忆后续助词的音调,其后续助词的音调总是低的,而在一般情况下,一个单词(两拍以上)后接的助词的音调(高或低)和该单词的最后一拍是相同的。一拍的单词完全不符合这个“一般情况”,只需要记住这一拍本身是低还是高,再根据“一个单词中第一拍和第二拍音调必定不同”来确定助词音调。单词本身的音调则通过多听、多用以形成固定的记忆。. K6 z5 L' @4 I" w' W+ V
8 J. F% ^1 L: {: b4 Z
8 Z6 }8 M* F% f
4 M5 ~, U7 h, l, x4 _; ]
' X+ F! `( J! j z. q- E$ L5 N9 W# Q2 c
2 G: D0 q- B- T$ A% x
$ q6 A8 X2 a6 T# x7 ]* S V |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?免费注册
x
评分
-
2
查看全部评分
-
本帖被以下淘专辑推荐:
- · 词典制作|主题: 217, 订阅: 40
- · 语言态度|主题: 150, 订阅: 19
|