3
7

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.

形態素解析しやすくなるツールを作った

Last updated at Posted at 2017-11-09

PyQt5を使って,テキストファイルをGUIで選択して形態素解説するツールやコードが調べた限りなさそうだったので作りました.(一回一回,テキストファイルの場所をターミナルで調べるのが怠いので.)
PyQtで完結しろよというツッコミは今回はスルー

形態素解析というのは,
**今日は月が綺麗ですね.**という文が与えられた時,

今日	名詞,副詞可能,*,*,*,*,今日,キョウ,キョー
は	助詞,係助詞,*,*,*,*,は,ハ,ワ
月	名詞,一般,*,*,*,*,月,ツキ,ツキ
が	助詞,格助詞,一般,*,*,*,が,ガ,ガ
綺麗	名詞,形容動詞語幹,*,*,*,*,綺麗,キレイ,キレイ
です	助動詞,*,*,*,特殊・デス,基本形,です,デス,デス
ね	助詞,終助詞,*,*,*,*,ね,ネ,ネ
.	記号,句点,*,*,*,*,.,.,.

のようにすることを形態素解析といいます.今回はmecabを使ってます.

実行すると,
このようにQTのファイルダイアログが表示されます.
形態素解析するファイルを選択

形態素解析したいテキストファイルを指定して(クリックして)OPENボタンを押すとウィンドウが閉じられて,出力がターミナルに表示されます.
ターミナル.png
(文字すごい小さいですが,名詞をスペース区切りで表示してます.)

あとは,ターミナルでパイプラインでファイル名打って保存したりして使ってください.

以下がコードです.
@shiracamusさんにリファクタリングしていただきました。
※事前にpipでPyQt5とmecabをインストールしておいてください.

morphological_analysis_gui.py
# -*- coding: utf-8 -*-
import sys
import MeCab

from PyQt5.QtWidgets import QApplication, QWidget, QInputDialog, QLineEdit, QFileDialog
from PyQt5.QtGui import QIcon

class FileNameDialog(QWidget):
    title = '形態素解析するファイルを選択'
    left, top, width, height = 10, 10, 640, 480

    def open(self):
        self.setWindowTitle(self.title)
        self.setGeometry(self.left, self.top, self.width, self.height)
        options = QFileDialog.Options()
        options |= QFileDialog.DontUseNativeDialog
        fileName, _ = QFileDialog.getOpenFileName(
            self, self.title, "", "Text File (*.txt)", options=options)
        return fileName

def show_words(text):
    # 辞書にneologdを使用
    m = MeCab.Tagger("/usr/local/lib/mecab/dic/mecab-ipadic-neologd")
    list_parse_text = m.parse(text).split("\n")
    for p_text in list_parse_text:
        if p_text.find("名詞,一般") >= 0 or p_text.find("名詞,固有名詞") >= 0:
            print(p_text[:-1].split("\t")[0] + " ", end="")

def main():
    app = QApplication(sys.argv)
    # sys.exit(app.exec_())
    dialog = FileNameDialog()
    fileName = dialog.open()
    dialog.close()
    if fileName:
        with open(fileName, 'r') as f:
            text = f.read()
            show_words(text)

if __name__ == '__main__':
    main()

[追記:2017/12/22]
ファイルを複数選択できるようにしました.
下のgithubのが最新のものとなります.

morph_gui
https://github.com/Ooshita/morph_gui

3
7
2

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
3
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?