/jisho-fuzzy-search

A Python program to fuzzy search Japanese dictionary

Primary LanguagePythonMIT LicenseMIT

日语词典模糊搜索

辞書あいまい検索

license: MIT

此仓库实现日语词典的模糊搜索。

此仓库开始写于2020年7月4日。

准备工作

  • 下载并安装Python 3
  • 在命令行中执行下列命令安装zhconv
pip install zhconv
  • EDRDG下载词典文件edict2u.gz,解压后,以dict_original.txt作为文件名保存到同目录下。
  • 运行Python文件handle.py,并等待显示出Done.
  • 如果目录下出现文件dict.txt,则说明准备工作完成。

使用

输入假名,搜索读音是该假名的词。例:

>>> はし
嘴	はし
橋	はし
端	はし
箸	はし

输入汉字,输出写作该汉字的词。例:

>>> 魚
魚	うお
魚	さかな

输入中文汉字,会自动转换成日语汉字。例:

>>> 绝对
絶対	ぜったい

输入空格,表示匹配任意0到4个字符(包括汉字、假名)。例:

>>> お ます
お邪魔します	おじゃまします
お願いします	おねがいします
鬼魣	おにかます

用罗马字的辅音或元音表示匹配这个音的任意假名。例如,k表示匹配中的任意一个;a表示匹配中的任意一个。例:

>>> kwsu
革装	かわそう
詳しく	くわしく
食わせる	くわせる

辅音可以输入两个字母的ch(表示)、sh(表示)、ts(表示),可以限定到更具体的范围。和大多数单字母不同的是,这些两个字母会匹配拗音,例如ch也会匹配ちゃ等;这是为了和下面一条规则保持一致。例:

>>> shch
七	しち
処置	しょち
鯱	しゃち

辅音可以输入单个字母+y,表示以这个辅音开始的拗音。例如ky会匹配きゃきゅきぇきょ。例:

>>> tysy
著者	ちょしゃ
著書	ちょしょ

在可能和两个字母的辅音混淆的地方,使用'断开。建议任何连续多个字母匹配假名之间都断开。例:

>>> t's'u
他殺	たさつ
多湿	たしつ
多数	たすう
地質	ちしつ
蜘蛛	ちしゅ
手数	てすう

注意:如果能确定假名,请直接输入假名。输入罗马字会被识别成一个辅音匹配假名和一个元音匹配假名。例如,输入ka是匹配[かきくけこ][あかがさざただなはばぱまやらわぁゃ]

其他一些字母的特殊匹配规则:

字母 匹配
x 大写あ行、长音符号、小写
(朗读时连读或无声,但演唱时单独发声的假名)
l 小写假名
lx 小写假名,但不包括(即舍假名)
lyxy 小写ゃ行
wy 的拗音
kwq 的拗音
qw 的ぁ行拗音和ゎ行拗音
qy 的ゃ行拗音
gw 的拗音
j
jy 的拗音
c 及它们的拗音
dz
sw 的拗音
zw ずぃ
cw 及它们的拗音
th 的拗音
dh 的拗音
tw 的拗音
dw 的拗音
fw 的ぁ行拗音
fy 的ゃ行拗音
v 及它的拗音
vy 的拗音
nn
katakana 片假名

匹配规则支持正则表达式。下面列举一些常用的:

  • .表示任意字符。
  • A{1,3}表示匹配前面这段规则重复1次到3次(即AAAAAA)。数字可以改。
  • 如果要匹配两条规则中的任意一条,可以用(A|B)的格式。例如,不知道辅音是n还是r,可以用(n|r)同时搜出来。
  • 如果要匹配两条规则同时满足,可以用(?=B)A的格式。例如,要搜索的拗音但不要的拗音(也就是同时满足jyじl),可以用(?=じl)jy
  • 如果要匹配满足第一条规则但排除第二条规则,可以用(?!B)A的格式。例如,要搜索小写假名但不要,可以用(?!っ)l
  • 如果要匹配和前文相同的字符,可以用(A)\1的格式,其中1代表第几组括号。例如,要搜索ABAC式的词语,可以用(.)(.)\1(?!\2).

优先输出完全匹配的结果。完全匹配是指从单词的开头到结尾恰好完整地匹配输入,在开头或结尾没有其他字符。

输出的结果中,常用词排在前面。然后再依次按读音的长度、写法的长度、读音顺序、写法顺序排序。

输出完一波结果之后,显示下列文字,询问是否继续输出。输入任意字符再按回车确认,直接按回车取消。

514 words found. 114 more. Show?

如果搜索结果一条都没有,则会尝试搜索释义。

输出的结果中,每行包括这个词的写法(黄色)、读音(白色)、词性(蓝色)、释义(灰色)四个部分。如果写法和读音相同,则省略输出读音。

表示词性的符号的完整列表,参见JMdict的说明。下面列出一些常见的:

符号 含义
P 常用词
archdated 古日语用法、过时的用法
rare 罕见的用法
iK 不规则的汉字写法(irregular)
后面的字母K是汉字(kanji),k是假名(kana),o是送假名(okurigana)
oK 过时的汉字写法(outdated)
rK 罕见的汉字写法(rare)
sK 便于搜索的汉字写法(search)
uK 常用的汉字写法(usually)
adj-i イ形容词 / 一类形容词
adj-na 形容动词 / ナ形容词 / 二类形容词
v5r 五段动词 / 一类动词
数字后的字母表示结尾假名的辅音,例如r表示以结尾
v1 一段动词 / 二类动词
vk カ行变格活用动词 / 三类动词
vs サ行变格活用动词 / 三类动词
横杠后的i表示原形中已经带了するs表示有时按变形
vz ずる结尾的一段动词 / 二类动词
v2r-k 上二段动词(古日语)(kami)
v2r-s 下二段动词(古日语)(shimo)
v4r 四段动词(古日语)
vi 自动词 / 不及物动词
vt 他动词 / 及物动词

注意事項

  • jaconv.pycolorprint.pyhulubot的一部分。此处为特别开源。代码可能和源代码有不同。
  • 词典文件的著作权等,参见EDRDG的许可声明