【Python3】日本語からハラスメント名を生成したいんだ！

#はじめに
閲覧ありがとうございます．
初めまして，Qiita初投稿です．

無駄なことをするのが大好きです．
Pythonに関しては不慣れなので，コーディングや知識への指摘がありましたらお願いします．
拙い記事ですが読んでいただけたら幸いです．

#開発環境
macOS Catalina 10.15.6
MacBook Pro (16-inch, 2019)
Python 3.8.6

#背景と目的
[「ロジハラ」「フキハラ」って何？ 新たに名づけられるハラスメントに賛否両論](https://limo.media/articles/-/20843 "「ロジハラ」「フキハラ」って何？ 新たに名づけられるハラスメントに賛否両論")

ニュースサイトを見ていると，上記のような記事を見かけました．

「セクハラ」，「パワハラ」，「ロジハラ」，などはどれも有名ですが，最近では他にもたくさんのハラスメントが増えてきているとのこと．．．
ハラスメントに対する啓蒙はもちろん重要だと思いますが，それにしてもあまり聞き馴染みのない単語をハラスメントとして会話に持ち出されては理解に苦しむというもの．（あくまで私の感想です）

そこで本記事では，ハラスメント対象の単語から「〇〇ハラ」というハラスメント名を生成することを目的とします．

例
「権力ハラスメント」→「パワー」→「パワハラ」
「論理ハラスメント」→「ロジック」→「ロジハラ」

#大まかな流れ
システムの大まかな流れとしては，

入力文の和英翻訳
↓
英単語をカタカナ英語に変換
↓
カタカナ英語の先頭２文字を切り出し
↓
「ハラ」とくっつけて出力

となります．

#事前準備

和英翻訳にはgoogletrans,カタカナ英語への変換にはalkanaを利用します．

```terminal:terminal
$ pip3 install googletrans
```

googletransについてはこちらの記事を参考にさせていただきました．
[【python】googletransの『AttributeError: 'NoneType' object has no attribute 'group'』対策【2020/12/02追記】](https://qiita.com/_yushuu/items/83c51e29771530646659 【python】googletransの『AttributeError: 'NoneType' object has no attribute 'group'』対策【2020/12/02追記】)

```terminal:terminal
$ git clone https://github.com/cod-sushi/alkana.py
$ cd alkana.py
$ python3 -m pip install -U .
```



alkanaについては，Qiita外の製作者様のサイトを参考にさせていただきました．
[[python] 英単語をカタカナに変換するパッケージ「alkana.py」を作りました](https://cod-sushi.com/alkana-py/ [python] 英単語をカタカナに変換するパッケージ「alkana.py」を作りました)

#実装

```python3:harassment.py
from googletrans import Translator
import alkana

input_str = input('harassment word : ')

tr = Translator(service_urls=['translate.googleapis.com'])
while True:
  try:
    text = tr.translate(input_str, dest="en").text
    break
  except Exception as e:
    tr = Translator(service_urls=['translate.googleapis.com'])

kana = alkana.get_kana(text)
print('generate =======> ' + kana[:2] + 'ハラ')
```

4行目でハラスメントにする日本語を入力
このためにハラスメントの綴りを調べました．
英語で出力された方がかっこいいので．（所感）

6~13行目ではgoogletransによる和英変換を行っています．

15行目ではalkanaによるカタカナ英語への変換を行っています．

以上のコードを実行すると．．．

```terminal:terminal
harassment word : 権力
generate =======> パワハラ
```

ちゃんと出力されていますね！

#問題点
しかし，「〇〇ハラ」には４文字のものだけでなく，「ジェンハラ」や「フォトハラ」のように５文字のものも存在しています．
これを先ほどのように実行してしまうと．．．

```terminal:terminal
harassment word : 写真
generate =======> フォハラ
```

うーん，ちょっとQiitaには投稿しづらい結果ですね．

そこで，カタカナ英語の２文字目に小文字が入っている場合は，３文字目まで切り出すことにしました．

```python3:harassment.py
lc_list = {'ァ','ィ','ゥ','ェ','ォ','ッ','ャ','ュ','ョ'}

if kana[1] in lc_list :
    print('generate =======> ' + kana[:3] + 'ハラ')
else :
    print('generate =======> ' + kana[:2] + 'ハラ')
```

小文字カタカナをリストにし，kanaの２文字目がそのリスト中に存在するかどうかで分岐を行っています．

```terminal:terminal
harassment word : 写真
generate =======> フォトハラ
```

無事に出力がされました．

#冒頭の記事に対して

さて，システムは完成しましたが，実際に冒頭の記事のタイトルにもある「フキハラ」についてはどうでしょう？
記事内で「フキハラ」は「不機嫌ハラスメント」ということになっていますが，「不機嫌」は当然日本語であり，「セクハラ」，「パワハラ」などのルールに当てはめた際には不適だと考えられます．

そこで，「不機嫌」をgoogletransにかけると「Bad mood」となってしまい，alkanaではカタカナ英語に変換することができませんでした．
このシステムでは，alkanaに存在している言葉しかカタカナ英語にできません．（と言っても５万語ほどの英単語に対応しているそうです，すごい！）

ですので代わりに「機嫌」を対象に出力すると，

```terminal:terminal
harassment word : 機嫌
generate =======> ムーハラ
```

ムードからの変換ですね．
若干の都市伝説みはありますが，まあありでしょう．
他には，

イライラ → frustlated → フラハラ
怒り → anger → アンハラ
むしゃくしゃ → crumpled → クラハラ

のようなものが出力されました．
皆さんは「フキハラ」の代わりに何を使いますか？

#おわりに
今回は，簡単ですがPython3で日本語から新しいハラスメント名を生成しました．
役に立たないシステムができて，個人的にはとても満足です．

最後にコードの全文を載せて終わりにしたいと思います．
お疲れ様でした．

```python3:harassment.py
from googletrans import Translator
import alkana

input_str = input('harassment word : ')

tr = Translator(service_urls=['translate.googleapis.com'])
while True:
  try:
    text = tr.translate(input_str, dest="en").text
    print(text)
    break
  except Exception as e:
    tr = Translator(service_urls=['translate.googleapis.com'])
kana = alkana.get_kana(text)

lc_list = {'ァ','ィ','ゥ','ェ','ォ','ッ','ャ','ュ','ョ'}

if kana[1] in lc_list :
    print('generate =======> ' + kana[:3] + 'ハラ')
else :
    print('generate =======> ' + kana[:2] + 'ハラ')
```