迷走ブログ

ファウスト的衝動を抱き、迷走している、凡人による気まぐれブログです。

【python】ランダムに単語を選び出すプログラムを考えてみた

はじめに

f:id:yktmmrmtoosa03:20220112185442p:plain

 

非エンジニアのpython初心者が、頑張ってPySimpleGUIを用いて単語を選び出すプログラムを作ってみました。

 

メンターがいないためここら辺が自分の限界かなとおもう今日この頃ですが、とりあえずめげずにコードを書きまくるという思いで作りました(笑)

 

 こんな人におすすめ 

  • python初心者
  • アイデアを強制的に引き出したい人
  • オリジナルの単語を作りたい人

 

 

どのようなプログラムを作ったのか

f:id:yktmmrmtoosa03:20220112190454j:plain

はじめて作成したアプリ

あらかじめ複数の単語を記したテキストファイルを用意しておきます。そのテキストファイルを読み込むことで、単語をランダムに選び出し、画面に選び出した単語を表示するというプログラムとなります。

 

そのため、例えば、整っていない状態の文章から形態素解析をして、そこから重みをつけて、類義語、対義語等を踏まえて、単語を生成するなどというたいそうな機能は付いていませんのでご理解いただければ幸いです。

 

用意するテキストファイルについて

f:id:yktmmrmtoosa03:20220112192451j:plain

あらかじめ用意するテキストファイル。単語が記載されている。

あらかじめ用意するテキストファイルには、単語を列挙し保存しておきます。その際、単語を左端に寄せて、改行で単語を並べておきます。

 

一応、テキストファイルにスペースがあれば、そのテキストファイルを読み込んだあとである程度整形するためのコードも書いてはいるのですが、時々、よくわからないが単語が上手く分けることができないです。

 

本来であれば、MeCab等を用いて、形態素解析して、品詞ごとに識別できるようにすればよいのでしょうが、ちょっと、今の僕には難しいため、断念しました。

 

単語を生成してみる

f:id:yktmmrmtoosa03:20220112192137j:plain

「生成」のボタンを押すと、下方に単語が表示される


テキストを選び終えると、そのテキストの存在するパスが表示されます。

そして、「生成」のボタンを押すと、単語が画面下方の「ーーー」のところに表示されます。

 

この時、2つの単語を選び出す際に、どのような挙動にするべきか非常に迷いました。

 

今回は単語をリストに入れておいて、そこからそれぞれ単語1と単語2を選びだすという方法にしました。そのため、重複して単語が選ばれてしまうことになるため、条件分岐にて、単語1と単語2が同じならば、単語2が単語1と異なるまで選び直し続けるというようにループするという処理を考えました。

 

ちょっと、それ以外、よい案がわかりませんでした。

 

エラーを吐く処理について

ちなみに、ファイルを選ばずに「生成」ボタンを押すと、ポップを表示することにしてみました。そして、「OK」ボタンを押すと強制終了するように処理しています。

 

f:id:yktmmrmtoosa03:20220112193619j:plain

エラーの処理

本来であれば、ポップアップ画面のみを閉じて、元の画面のままを残したかったのですが、条件分岐を作るときの流れがイマイチ理解できておらず、中途半端な状態になっています。

 

基本的な挙動の書き方を理解しきれていない部分があるので、勉強し直すしかなさそうだと感じています。ただし、やはり何かつくりながらではないと、退屈な文法のお勉強で終わってしまいそうなので、取り組み方は工夫しますが。。。

 

単語の生成を繰り返す

f:id:yktmmrmtoosa03:20220112195229j:plain

再度「生成」ボタンを押すと、再度単語を選び直す

 

ファイルを選択し、一度単語を生成した後に、再度単語を生成することを考えました。

この時、元の単語のどちらかを残す処理にしようかと思ったのですが、実力不足のため諦めました。

 

コード

gist7c7e1c66495e7f9c12bca9ec5e20990c

 

 

反省点

やはりプログラムが汚いのはどうにかしたいけれど、どこをどのように改善していけばよいのか。。。

 

例えば、for文のところをできるだけリスト内表記した方がよいというのは知りましたが、実際にリスト内表記にしてみたらエラー吐き出す始末。。。

 

リストから文字列への変換が必要なるのはわかったけれど、その前までの空白を削除するための処理はどう変更すればよいのか等、疑問ばかりの状態になりました。

 

また、機能面にしてもテキストファイル自体の処理を終えた後の単語の生成ももっと凝ったもの(例えば、単語に重みづけし、単語の類似度を測る等)をつくりたいけれど、そこまでいくと、たぶん、ディープラーニングあたりの知識が必要そうですよね。。。

 

そうなるとより一層、はやい処理をするための工夫も必要でしょうから、ちょっと、今の実力では太刀打ちできないですね。。。

参考文献

 

 

 

 

おわりに

とりあえず、コツコツ勉強しながら、具現化する力を養っていくしかない!!!