韓国語を処理するために存在する最高のトークナイザーは何ですか?
Solr4.0でCJKTokenizerを試しました。トークン化を行っていますが、精度は非常に低いです。
韓国語を処理するために存在する最高のトークナイザーは何ですか?
Solr4.0でCJKTokenizerを試しました。トークン化を行っていますが、精度は非常に低いです。
POSTECH / Kは、韓国のデータをトークン化してPOSタグを付けることができる韓国の形態素解析器です。ソフトウェアは、トレーニングおよびテストされたコーパスで90.7%を報告します(http://nlp.postech.ac.kr/download/postag_k/9908_cljournal_gblee.pdfを参照)。
POSタグ付けは、私が取り組んできた多言語コーパスプロジェクトの韓国語データで81%を達成しました。
ただし、落とし穴があります。ソフトウェアを実行するには、Windowsを使用する必要があります。しかし、私はその制限を回避するためのスクリプトを持っています、これがスクリプトです:
#!/bin/bash -x
###############################################################################
## Sejong-Shell is a script to call POSTAG/SEJONG tagger on Unix Machine
## because POSTAG/Sejong is only usable in Korean Microsoft Windows environment
## the original POSTAG/Sejong can be downloaded from
## http://isoft.postech.ac.kr/Course/CS730b/2005/index.html
##
## Sejong-Shell is dependent on WINdows Emulator.
## The WINE program can be downloaded from
## http://www.winehq.org/download/
##
## The shell scripts accepts the input files from one directory and
## outputs the tagged files into another while retaining the filename
###############################################################################
cd <source-file_dir>
#<source_-ile_dir> is the directory that saves the textfiles that needs tagging
for file in `dir -d *`
do
echo $file
sudo cp <source-file_dir>/"$file" <POSTAG-Sejong_dir>/input.txt
# <POSTAG-Sejong_dir> refers to the directory where the pos-tagger is saved
wine start /Unix "$HOME/postagsejong/sjTaggerInteg.exe"
sleep 30
# This is necessary so that the file from the current loop won't be
# overlapping with the next, do increase the time for sleep if the file
# is large and needs more than 30 sec for POSTAG/Sejong to tag.
sudo cp <POSTAG-Sejong_dir>/output.txt <target-file_dir>/"$file"
# <target-file_dir> is where you want the output files to be stored
done
# Instead of the sleep command to prevent the overlap:
# $sleep 30
# Alternatively, you can manually continue a loop with the following
# command that continues a loop after a keystroke input:
# $read -p "Press any key to continue…"
POSTECH / Kのエンコーディングは、であることに注意してeuc-kr
くださいutf8
。次のスクリプトを使用して、utf8からeuc-krに変換できます。
#!/usr/bin/python # -*- coding: utf-8 -*-
'''
pre-sejong clean
'''
import codecs
import nltk
import os, sys, re, glob
from nltk.tokenize import RegexpTokenizer
reload(sys)
sys.setdefaultencoding('utf-8')
cwd = './gizaclean_ko' #os.getcwd()
wrd = './presejong_ko'
kr_sent_tokenizer = nltk.RegexpTokenizer(u'[^!?.?!]*[!?."www.*"]')
for infile in glob.glob(os.path.join(cwd, '*.txt')):
# if infile == './extract_ko/singapore-sling.txt': continue
# if infile == './extract_ko/ion-orchard.txt': continue
print infile
(PATH, FILENAME) = os.path.split(infile)
reader = open(infile)
writer = open(os.path.join(wrd, FILENAME).encode('euc-kr'),'w')
for line in reader:
para = []urlread = lambda url: urllib.urlopen(url).read()
para.append (kr_sent_tokenizer.tokenize(unicode(line,'utf-8').strip()))
for sent in para[0]:
newsent = sent.replace(u'\xa0', ' '.encode('utf-8'))
newsent2 = newsent.replace(u'\xe7', 'c'.encode('utf-8'))
newsent3 = newsent2.replace(u'\xe9', 'e'.encode('utf-8'))
newsent4 = newsent3.replace(u'\u2013', '-')
newsent5 = newsent4.replace(u'\xa9', '(c)')
newsent6 = newsent5.encode('euc-kr').strip()
print newsent6
writer.write(newsent6+'\n')
(sejong-shellの出典:Liling Tan。2011年。南洋理工大学の基礎テキストの構築-多言語コーパス(NTU-MC)。最終年度のプロジェクト。シンガポール:南洋理工大学。44ページ。)