クソアプリ Advent Calendar 2019 6日目の記事です。
#作ったくそアプリ
結婚式用忌み言葉チェッカーです。
- チェックしたい言葉入力する
- 文章チェックボタンクリック
- チェック結果を確認する
- 黄色背景をクリックすると、言い換え前のもの、言い換え理由がでます
#望み
結婚式準備の喧嘩を少なくしたいね!
上司になったとき粗相をなくしたいね!
#前置き
結婚式をしましたが、準備が多く大変です。時間のかかる準備の一つに招待状の作成とスピーチ原稿の推敲があります。
結婚式にはを相応しくない言葉(忌み言葉)があり、忌み言葉を回避する必要があります。
世の中のツールでは忌み言葉を発見できますが、言い換えを示してくれない&理由を示してくれないので作りました。
#技術的なお話
Django+jQuery+Bootstrap4で作りました。
※Vue.jsとか使ってみたかったですが、この程度ですと逆にめんどくさくなりそうなので、使い慣れたjQueryを使いました。
##言い換え部分の実装
###辞書作成
対象の言葉、言い換える言葉、引っかかった理由をまとめたTSVファイルを作成しました。
たびたび よく 重ね言葉
しばしば よく 重ね言葉
くれぐれ 十分に 重ね言葉
ご多忙 ご多用 死を連想させる言葉
多忙 多用 死を連想させる言葉
###言い換え実装
入力をうけとったあとの処理はこんな感じです。
import MeCab
from django.utils import html
def getmecabresult(text):
text = html.strip_tags(text)
imi_word = {}
imi_wordlist = []
with open("imiword.tsv", "r") as f:
for imi in f:
item = imi.strip().split("\t")
imi_wordlist.append(item[0])
imi_word[item[0]] = {"replace": item[1], "reason": item[2]}
mecab = MeCab.Tagger("-Owakati")
mecab.parse('')
word_list = text.split("\n")
resultlist = []
count = 1
word_obj = {}
for word in word_list:
node = mecab.parseToNode(word)
while node:
word = node.surface
word_obj["word"] = word
word_obj["replace"] = ""
word_obj["reason"] = ""
word_obj["istaboo"] = False
for iw in imi_wordlist:
if word.find(iw) != -1:
word_obj["replace"] = imi_word[iw]["replace"]
word_obj["reason"] = imi_word[iw]["reason"]
word_obj["istaboo"] = True
count += 1
break
node = node.next
resultlist.append(word_obj.copy())
resultlist.append({"word": "\n", "replace": "", "reason": ""})
data = {"resultlist": resultlist, "count": count}
return data
- 入力したテキストをmecabにて言葉毎にわける
- 分けた言葉を、予め登録しておいた言葉と比較して、チェックする
- もろもろ返却する
###おまけ
「クソアプリ」は1つの単語としてmecabで認識されたため、記事中は「くそアプリ」表記となってます
###20191214追記
Edge、IEだと403エラーになる問題修正しました。
問題出た場合はTwitterまでコメントいただけますと幸いです。