Skip to content

Instantly share code, notes, and snippets.

@hirokiky
Last active September 7, 2021 15:47
Show Gist options
  • Save hirokiky/bb12830ca69eea1e66c8032ac645c870 to your computer and use it in GitHub Desktop.
Save hirokiky/bb12830ca69eea1e66c8032ac645c870 to your computer and use it in GitHub Desktop.
日本語のら抜き言葉を検知します。語は終止形で指定してください(例:見れる)。
"""
日本語の「ら抜き言葉」を検知します。語は(可能動詞とした)終止形で指定してください(例:見れる)。
実装については以下の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