2012-11-20 13 views
5

Qual è il miglior tokenizzatore esistente per l'elaborazione della lingua coreana?tokenizer in linguaggio coreano

ho cercato CJKTokenizer in Solr4.0. Sta facendo la tokenizzazione, ma la precisione è molto bassa.

+1

Stai cercando tokenizer OSS gratuito, vero? Ho paura che l'unico tokenizzatore per le lingue CJKV che so funzionare più o meno correttamente sia commerciale. –

risposta

2

POSTECH/K è un analizzatore morfologico coreano in grado di eseguire il tokenize e il tag POS con dati coreani senza troppi sforzi. Il software riporta il 90,7% del corpus che è stato addestrato e testato su (vedi http://nlp.postech.ac.kr/download/postag_k/9908_cljournal_gblee.pdf).

Il tagging POS ha ottenuto l'81% dei dati coreano di un multilingual corpus project su cui ho lavorato.

Tuttavia, c'è un problema, è necessario utilizzare Windows per eseguire il software. Ma ho uno script per aggirare questa limitazione, ecco lo script:

#!/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…" 

Si noti che la codifica POSTECH/K è euc-kr, quindi se è utf8. puoi usare il seguente script per convertire da utf8 a 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')  

(fonte per Sejong-shell: Liling Tan 2011. Costruire il testo base per la Nanyang Technological University - Multilingual Corpus (NTU-MC) anno di progetto finale di Singapore:. Nanyang Technological University pp.... 44.)

0

Si consiglia di utilizzare questo site. Le sue prestazioni sono davvero belle anche se servono solo come funzionalità RESTful.