Last active
September 7, 2021 15:47
-
-
Save hirokiky/bb12830ca69eea1e66c8032ac645c870 to your computer and use it in GitHub Desktop.
日本語のら抜き言葉を検知します。語は終止形で指定してください(例:見れる)。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
""" | |
日本語の「ら抜き言葉」を検知します。語は(可能動詞とした)終止形で指定してください(例:見れる)。 | |
実装については以下のURLを参照してください。 | |
https://blog.shodo.ink/entry/2021/09/05/013031 | |
形態素解析の辞書によっては、ら抜き言葉を1語として認識することがあるため必要となります。 | |
例:UniDic、SudachiDict、IPADic(見れる・来れるのみ) | |
こちらのコードはMIT Licenseとして公開します。 | |
Copyright (c) 2021 ZenProducts Inc. | |
""" | |
RA_SPECIAL = { | |
"いれる", | |
"にれる", | |
"ひれる", | |
"みれる", | |
"えれる", | |
"ねれる", | |
"来れる", | |
"射れる", | |
"鋳れる", | |
"居れる", | |
"癒れる", | |
"着れる", | |
"退治れる", | |
"煮れる", | |
"相似れる", | |
"嚔れる", | |
"乾れる", | |
"干れる", | |
"簸れる", | |
"黴れる", | |
"下卑れる", | |
"廻れる", | |
"惟れる", | |
"見れる", | |
"診れる", | |
"鑑れる", | |
"沃れる", | |
"将れる", | |
"率れる", | |
"得れる", | |
"惚気れる", | |
"湿気れる", | |
"道化れる", | |
"悄気れる", | |
"魂消れる", | |
"変化れる", | |
"出れる", | |
"寝れる", | |
"真似れる", | |
"経れる", | |
"綜れる", | |
"洒落れる", | |
} | |
GO_SPECIAL = { | |
"きれる", | |
"しれる", | |
"ちれる", | |
"りれる", | |
"けれる", | |
"せれる", | |
"てれる", | |
"へれる", | |
"めれる", | |
"れれる" | |
"どじれる", | |
"けちれる", | |
"ちびれる", | |
"せびれる", | |
"とちれる", | |
"びびれる", | |
"いびれる", | |
"しくじれる", | |
"せせれる", | |
"うねれる", | |
"そべれる", | |
"つんのめれる", | |
} | |
KAMI_ICHI = "いきしちにひみりゐ" | |
SHIMO_ICHI = "えけせてねへめれゑ" | |
def is_dropping_ra(word: str): | |
if word == "れる" or word.endswith("られる") or not word.endswith("れる"): | |
return False | |
# Recognize Kami-Ichi, Shimo-Ichi, or Ka-Hen. | |
if word in RA_SPECIAL: | |
return True | |
if word in GO_SPECIAL: | |
return False | |
return word[-3] in (KAMI_ICHI + SHIMO_ICHI) | |
assert is_dropping_ra("食べれる") | |
assert is_dropping_ra("起きれる") | |
assert is_dropping_ra("決めれる") | |
assert is_dropping_ra("見れる") | |
assert is_dropping_ra("来れる") | |
assert is_dropping_ra("寝れる") | |
assert is_dropping_ra("ねれる") | |
assert is_dropping_ra("出れる") | |
assert is_dropping_ra("着れる") | |
assert not is_dropping_ra("切れる") | |
assert not is_dropping_ra("入れる") | |
assert not is_dropping_ra("やれる") | |
assert not is_dropping_ra("買える") | |
assert not is_dropping_ra("行ける") |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment