package hh;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.StringReader;
import opennlp.tools.cmdline.postag.POSModelLoader;
import opennlp.tools.postag.POSModel;
import com.opencsv.CSVReader;
import opennlp.tools.cmdline.PerformanceMonitor;
import opennlp.tools.cmdline.postag.POSModelLoader;
import opennlp.tools.postag.POSModel;
import opennlp.tools.postag.POSSample;
import opennlp.tools.postag.POSTaggerME;
import opennlp.tools.tokenize.Tokenizer;
import opennlp.tools.tokenize.TokenizerME;
import opennlp.tools.tokenize.TokenizerModel;
import opennlp.tools.tokenize.WhitespaceTokenizer;
import opennlp.tools.util.ObjectStream;
import opennlp.tools.util.PlainTextByLineStream;
public class hello {
public static void main(String args[]) throws IOException {
POSTag();
}
public static void POSTag() throws IOException {
POSModel model1 = new POSModelLoader().load(new File("en-pos-maxent.bin"));
PerformanceMonitor perfMon = new PerformanceMonitor(System.err, "sent");
POSTaggerME tagger = new POSTaggerME(model1);
FileInputStream is = new FileInputStream("en-token.bin");
TokenizerModel model2 = new TokenizerModel(is);
Tokenizer tokenizer = new TokenizerME(model2);
//
PrintWriter pw = new PrintWriter(new File("test.csv")); // 프로젝트 파일로 가보면
// 이이름으로 저장
// 되어있다. ,
// return file
// name.
StringBuilder sb = new StringBuilder();
sb.append("id");
sb.append(',');
sb.append("abstract");
sb.append('\n');
//
String csvFileName = "CN_ABE.csv"; // 자신의 csv파일을 프로젝트에 추가해야함 , put your
// csv
CSVReader csvReader = new CSVReader(new FileReader(csvFileName));
String[] row = null;
String outN;
// int count =0;
System.out.println("not yet to while");
perfMon.start();
while ((row = csvReader.readNext()) != null) { //csv 파일 끝까지
System.out.println("["+row[0]+"] , ");// 논문 번호
sb.append("["+row[0]+"]");
sb.append(" , ");
String tokens[] = tokenizer.tokenize(row[1].toString());
for (String a : tokens) {
ObjectStream<String> lineStream = new PlainTextByLineStream(new StringReader(a));
String[] noun_s;
String whitespaceTokenizerLine[] = WhitespaceTokenizer.INSTANCE.tokenize(a);
String[] tags = tagger.tag(whitespaceTokenizerLine);
POSSample sample = new POSSample(tags, whitespaceTokenizerLine);
String sampletoString = null;
char noun;
noun = sample.toString().charAt(0);
if (noun == 'N') {// 가장 앞글자가 N인것, 즉 명사만 추출 , extract Noun
if(sample.toString().indexOf("_")<=3 || sample.toString().indexOf("_")<=4){//NNPS_(4) , 글자증 '_'가 포함된 글자가있을수도 있어서
outN = sample.toString().substring(sample.toString().indexOf("_") + 1, sample.toString().length());
}
else{
outN = sample.toString();
}
System.out.print(outN);
sb.append(outN);
System.out.print(",");
sb.append(',');
}
}
System.out.println("");//논문의 abstract가 끝나면
sb.append('\n');
// perfMon.incrementCounter();
// perfMon.stopAndPrintFinalResult();
}
pw.write(sb.toString());
pw.close();
csvReader.close();
}
}
'개발 > Big data' 카테고리의 다른 글
래피드마이너 설치 (0) | 2017.07.27 |
---|---|
stemming postagging 합친것 정리 (0) | 2016.05.29 |
자바 소문자로 변환 (0) | 2016.05.29 |
포스테깅 한 csv파일을 스태밍 한 후 csv파일로 내보내기(make stemming csv file from csv file) (0) | 2016.05.25 |