47
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

クソアプリAdvent Calendar 2019

Day 6

結婚式用忌み言葉チェッカー作ったよ

Last updated at Posted at 2019-12-05

クソアプリ Advent Calendar 2019 6日目の記事です。

#作ったくそアプリ
結婚式用忌み言葉チェッカーです。
Peek 2019-12-03 21-13.gif

  • チェックしたい言葉入力する
  • 文章チェックボタンクリック
  • チェック結果を確認する
  • 黄色背景をクリックすると、言い換え前のもの、言い換え理由がでます

#望み
結婚式準備の喧嘩を少なくしたいね!
上司になったとき粗相をなくしたいね!

#前置き
結婚式をしましたが、準備が多く大変です。時間のかかる準備の一つに招待状の作成とスピーチ原稿の推敲があります。
結婚式にはを相応しくない言葉(忌み言葉)があり、忌み言葉を回避する必要があります。
世の中のツールでは忌み言葉を発見できますが、言い換えを示してくれない&理由を示してくれないので作りました。

#技術的なお話
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までコメントいただけますと幸いです。

47
12
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
47
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?