日々気まぐれログ

やったりやらなかったり。  

ツギクルバナー 小説『夢次元機アルマエレンシア』連載中です。
 よろしくお願いします。

2020年07月

JUMAN++の処理速度が遅い問題

colab-logo-1


MeCab他、形態素解析はそれぞれ一長一短あれど
ひとまずウチではJUMAN++を採用するに至り。

しかし、処理速度が遅い。遅いったら遅い。
Google Colabで走らせて寝て起きて。
気づいたら止まってた、ということもしばしば。

なので途中までの出力をドライブに保存しつつ、
処理済みのコーパスをスルーしようというアレ。

ただ、途中で処理をやめたものはやり直してほしいので
存在するファイルの一個前から再処理という形に。
初回0番目ファイルは普通に処理してもろて、はいヨロシクゥ。


# 品詞分解メイン処理

def juman():
    spritfile_list = glob.glob(output_dir + '/*')
    spritfile_list.sort()
    print('総分割ツイートファイル数:'+str(len(spritfile_list)))

    for i in range(0,len(spritfile_list)) :
        if os.path.exists(juman_dir +'/juman-' + str(i) + '.csv') and i != 0:
           print('処理済みなのでスルー:juman-'+str(i)+'.csv')
           i=i-1
        else :
             reedfile = spritfile_list[i]
             cmd = 'cat "' + spritfile_list[i] + '" | /usr/local/bin/jumanpp > "' + 
       juman_dir +'/juman-' + str(i) + '.csv"'
             os.system(cmd)
             print('出力完了:juman-'+str(i)+'.csv')


Twitter産対話コーパスを整形するやつ

colab-logo-1

前回の記事では対話コーパスに識別子をわざわざつけた。
しかし、別ファイルに保存したほうが取り扱いが楽なのでは?
と思い立ったのでコーパスファイルを整形するやつ。

24時間毎にテキストファイルが分割されているのを前提に、
一度すべて結合したものを中間保存する。
クソデカコーパスファイルが出来上がるが、
これを処理したほうが楽な場合もあるので
一時ファイルとして残しておく。

次に一時ファイルを1行ずつ読み込み
識別子で発話文と応答文別にファイルを振り分け保存。
偶数行奇数行に分けると楽なんだろうけど
なんかノイズが混じってたら破綻するのでこういう仕様。
多分これが一番遅いと思います(迫真)

import glob

src_dir = "/SOURCE" # 対話コーパスを格納しているディレクトリ
joint_name = "/joint.txt" # 結合したファイルのパス
q_name = "/q.txt" # 発話ファイルのパス
a_name = "/a.txt" # 応答ファイルのパス



# ファイル結合
def gattai():
    file_list = glob.glob(src_dir + '/*')
    for i in range(0,len(file_list)) :
            with open(file_list[i], 'r') as file:
                 text = file.readlines("".join(lines))
                 with open(joint_name, 'a') as save_file:
                      save_file.write(text)

# ファイル仕分け
def bunri():     
    with open(joint_name, 'r') as file:
         while True:
               line = file.readline()
               if line:
                  if  'REQ:' in line:
                      with open(q_name, 'a') as file_q:
                           file_q.write("".join(line))
                  if  'RES:' in line :
                      with open(a_name, 'a') as file_a:
                           file_a.write("".join(line))
               else:
                 break

#gattai()
#bunri()
#使いたい方のコメントアウトを解除する


ぼちぼちゲームライターやってます。なお、このブログやTwitterでの発言は私個人のものであり、各掲載媒体様は無関係であります。予めご承知おきくださいませ。
うちの同人誌
amazon.co.jp