TA的每日心情 | 开心 2023-3-10 21:15 |
---|
签到天数: 1329 天 [LV.10]以坛为家III
|
本帖最后由 enjoy了哦 于 2019-3-23 23:23 编辑
u/ ^& z# s7 n7 I7 A' ?, T/ a" T4 F6 Y9 s- w
通过调查日语单词中音调类型的比例,可以得出一些结论,方便记忆单词本身和其后续助词的音调。
6 G+ l4 X2 h/ f0 w
& g4 P$ b; J( ]! b' w原始数据:新明解国语辞典第5版(EPWING格式): d+ C+ {! t7 b. a! B3 t) {' t
首先通过 EBDump 打开该EPWING格式词典的文件夹的 HONMON 文件,导出其中的“前方一致表記形見出し”部分,选择全部的1412个block。 O# n, B/ H- K+ g [
3 r9 G1 o8 C3 t$ G. @
1 s7 Y6 I) r; X导出后,将该文件转码成 UTF-8 格式,并使用正则表达式替换部分内容,使其容易被后续分析处理。
* Y. h' e8 M+ M X; x5 @
, c2 k- W: \9 V
# {% ^' m' V, m+ [5 O# E2 c为统计尾高型音调,需要知道每个单词的拍数。由于拗音占有两个字符,但只算一拍,为了方便统计,将其中的小的[ゃ][ゅ][ょ] 及对应的片假名(还有小的[ア][イ][ウ][エ][オ]等,外来词专用音节)去掉,即[きゃ][きゅ][きょ]中后面那个字符。这样一来,拍数就等于字符数了。9 O! `0 C& d; F; a7 h, n2 ^
- [6 R6 `! e/ v! q" [
最终的经过清洗的“干净”的数据如下所示,根据个人的习惯进行处理:: _8 D; ^+ ^5 U' c
& N- x* h' \. ~# i7 [
; W: h+ E" n3 U8 t" N9 M然后可以通过 Python 进行统计,一个单词可能有多个音调,但只统计第一个音调(稍微改动源码可以统计所有的音调)。这个代码可以用来明白大致的统计思路,后续还有写零碎的更改,并没有体现在这里面。* r. B7 k' }5 d2 F& @
- #!/usr/bin/env python1 [, w7 f m9 q0 W
- #_*_ coding:utf-8 _*_
6 }, W1 n0 {! J/ O1 {) t - 3 t. s/ A6 ]9 y# D
- import sys,os
+ y( i0 g5 ^; \& v - import numpy as np4 E% Y; m! N+ ]4 A) S8 T
) w* m C \2 h8 {- # 带有音调标记的词汇数目$ n- r+ e! |+ @% K' p/ R& }
- all_entry = 09 @+ U3 ~. p- [2 H# @, k
& g- Y) A! _0 x- # 平板型,[0]
4 E1 z z1 M2 ]4 n) ^/ s - entry_0 = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]# e0 T, u1 {+ @5 E
- : k* z" Q1 Z$ I
- # 头高型,[1]
+ ?' u+ t! h6 i. v% {9 t - entry_1 = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
4 J' k& L# v0 P$ u8 D2 x
, a1 p7 T6 c5 ]& }+ \- # 尾高型,[x] = 拍数
3 U* ^/ T3 c. N6 r1 N7 t4 V( p. _9 ]5 k - entry_last_high = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
4 i5 X+ }3 r% S6 ^6 ~. @
5 _- b) y$ l) l, U, J; Z; l8 a$ ]- # 中高型,[x] < 拍数
' ~ O) h6 ~# Z6 V: Q+ V1 G3 e9 ~ - entry_middle = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
E; ?3 g& D9 _; s
9 C) A7 Z" W+ D3 X- file_name = sys.argv[1]
! `) D3 \9 D' x: ~ - f = open(file_name,'rb')
' c0 J0 B2 m9 j( K" [# e4 ^# X& F) D - for line in f:# P5 ^/ J. y) u. W0 n0 P
- line = line.replace(b"\r\n",b"")
" ^& K- h- \0 U' h9 N) j2 B8 B - line = line.decode()
8 A, l' d) Y6 ` n9 _ - db = line.split(',')
8 I' i: z( A% u4 Z7 A) O8 Y8 Z - word_len = len(db[0])' {; W1 z* _( ?1 k% b$ b7 J/ b
- if word_len < 16:
! C: H! V; q* n% y7 @ - all_entry = all_entry + 1
, G1 X* F9 P% W) [: |0 f3 R& f - for i in range(1,len(db)):4 G# Z9 w q( {0 G
- accent = db[i], l2 n0 f! G/ o+ E- }2 ?+ Q' G
- if accent.startswith('['):
; l L1 y$ }2 K& A- Z - integer = int(accent[1])$ Z6 Z: F) B7 [" f5 Y1 z
- if integer == 0:
% k: X+ c+ o; C" \! J - entry_0[word_len] = entry_0[word_len] + 1
2 u) K. X. ?$ ` S1 E% y* P - elif integer == 1:
# [" ]7 C. P4 T8 ~ - entry_1[word_len] = entry_1[word_len] + 10 _- ^* _- l, r( _" W+ e0 ~' w f5 b
- elif integer == word_len:9 K; S8 r; F: T0 w# ^* g( [& D; Y
- entry_last_high[word_len] = entry_last_high[word_len] + 1
* l0 g! z. n3 T. M! c& { - else:
% r" O. B7 ]0 b3 L8 ^5 Y - entry_middle[word_len] = entry_middle[word_len] + 1
2 ]* ]8 I i* n8 I! f - break
9 t- c; p3 W& E& ?
, {, ]$ }0 \3 C c% R5 k$ t' o3 ^- print('[0]:')% a i9 ~/ v; m0 j3 r& Z
- for i in range(1,len(entry_0)):
- I+ R/ s" e+ K& V0 K - print('%d' % (entry_0[i]))$ i0 B( o: O4 j2 ]. s4 v
- print('entries: %d' % np.sum(entry_0))
* g) r" d: m. C) K# A7 x - print('\n')5 |8 m! p' h5 ]9 _ r; ~% r: q
- + X0 K) r5 a; ~6 |
- print('[1]:')& [4 n7 P( j. c. j/ b
- for i in range(1,len(entry_1)):" I1 S- d0 m- L9 V" I% l
- print('%d' % (entry_1[i]))7 Q5 d) \1 g% K4 z, Y
- print('entries: %d' % np.sum(entry_1))
/ w! c. H1 ?( G8 ~) D% b - print('\n')
) B3 C0 M! h" e1 r: }6 Y: V - 7 Z% z: _5 s3 X
- print('middle high:')
' x3 S s Z* o4 R+ M8 c+ j7 K - for i in range(1,len(entry_middle)):
5 g% ~( C2 f. N2 w7 k - print('%d' % (entry_middle[i]))
) `* |$ a. l7 f8 x - print('entries: %d' % np.sum(entry_middle))6 }$ N+ G; ^% G- F" ?$ k
- print('\n')
0 k& }5 V7 U. ^9 e - , D( l z9 s" w
- print('last high:')0 E! h8 v* }0 ?/ U2 \
- for i in range(1,len(entry_last_high)):
% b$ p. J# J; I/ k - print('%d' % (entry_last_high[i]))8 Q! [ B% T/ l( [0 d B
- print('entries: %d' % np.sum(entry_last_high))2 i# j" x; K8 ]3 b, L7 W
- print('\n')$ f% E+ q0 W# |6 C* a
- ' R7 ?9 O! C5 n. {( T1 q f( v
- print('all entries:')
. ^; I0 B$ I; O# b - print(all_entry)
* A9 ?7 V' \, O5 @1 m
' Y v- }8 r! M4 s& J/ ~- f.close()
复制代码
$ }; c* ~) h8 P/ F. }1 l
/ O/ s% [2 W5 y7 V# c+ q最后将 Python 输出结果进行数据可视化:
1 z) M8 z8 X. g" m# s& I0 A( t/ ^! N7 y, A" h: F
& _2 l0 x( m$ ?
1 X$ p! o% `1 l, P! a: m
2 j# @+ V0 Y3 e6 _
以及饼图:
; n6 t- O3 [& v/ k
3 O# S, ~/ d- u
; o0 C O! X" t$ `可以得出几个结论:& K9 o' Z$ |" P; q6 y$ ~. K
1. 尾高型的单词很少(约2%,大部分在2拍和3拍的单词上,2拍和3拍五五开,总共约1300个单词(在7万多个单词中)。5 z& _- @' b( d7 \' t
2. 头高型的单词次少(约17%),主要集中在3拍的单词上(约51%),2拍和4拍都约占20%左右。7 q2 C. L5 |' ]3 w3 s( ^; Z
3. 日语中4拍的单词最多(约42%),并且相当一部分(约72%)是平板型。这和新标日中入门单元里,“声调和语调”部分中“声调”小节里的解说是一样的。
+ P4 f/ p) t1 w) L! [4. 记忆平板型和尾高型的单词时,单词本身发音规律相同,都是前低后高,但后接的助词音调不同,不好记忆。但通过上述统计,可以这么做:(两拍以上)尾高型的单词单独记忆后续助词的音调,其后续助词的音调总是低的,而在一般情况下,一个单词(两拍以上)后接的助词的音调(高或低)和该单词的最后一拍是相同的。一拍的单词完全不符合这个“一般情况”,只需要记住这一拍本身是低还是高,再根据“一个单词中第一拍和第二拍音调必定不同”来确定助词音调。单词本身的音调则通过多听、多用以形成固定的记忆。+ O `; L C& x2 C( T+ j0 G+ A
0 }+ |. J# l3 d# S# s7 O# P, V
' m3 Z. X6 {+ L& p: i0 {4 {! F/ t8 V" ]- o% Q
( i+ G) @3 p2 |, }& T6 G. t$ J0 f$ F2 n5 P
4 R2 D' i- j8 o! p1 F: z; c
# m5 @- O) L4 h$ }5 u: \
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?免费注册
x
评分
-
2
查看全部评分
-
本帖被以下淘专辑推荐:
- · 词典制作|主题: 217, 订阅: 40
- · 语言态度|主题: 150, 订阅: 19
|