//csv파일을 opnlp로 스테밍 하고 포스테깅 해서 총 결과를 csv파일로 추출 하기
action.java
----------
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 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 Action {
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;
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());
} // outN에 출력 할 명사 넣기
else {
outN = sample.toString();
}
// stem 호출
outN = StemA(outN);
// 최종 outN 출력 하고 파일만들기
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();
}// posTag끝
public static String StemA(String outN) throws IOException {
Stemmer s = new Stemmer();// 스테머 객체 추가
// stem 시작
// stem 시작
outN = outN.toLowerCase();// 소문자 변환
for (int i = 0; i < outN.length(); i++) {
s.add(outN.charAt(i));
} // 한글자씩 스테머에 추가
s.stem(); // 스탬 함수 호출
String u;
u = s.toString(); // 스태밍 한 것을 스트링 u에 넣기
return u;
// stem 끝
// stem 끝
}
------------------------------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------------------------------
Stemmer.java
-------------
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 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 Action {
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;
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());
} // outN에 출력 할 명사 넣기
else {
outN = sample.toString();
}
// stem 호출
outN = StemA(outN);
// 최종 outN 출력 하고 파일만들기
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();
}// posTag끝
public static String StemA(String outN) throws IOException {
Stemmer s = new Stemmer();// 스테머 객체 추가
// stem 시작
// stem 시작
outN = outN.toLowerCase();// 소문자 변환
for (int i = 0; i < outN.length(); i++) {
s.add(outN.charAt(i));
} // 한글자씩 스테머에 추가
s.stem(); // 스탬 함수 호출
String u;
u = s.toString(); // 스태밍 한 것을 스트링 u에 넣기
return u;
// stem 끝
// stem 끝
}
}
------------------------------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------------------------------
package test;
class StepforStem {
private char[] b;
private int i, /* offset into b */
i_end, /* offset to end of stemmed word */
j, k;
private static final int INC = 50;
public StepforStem() {
}
}
------------------------------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------------------------------
'개발 > Big data' 카테고리의 다른 글
래피드마이너 설치 (0) | 2017.07.27 |
---|---|
자바 소문자로 변환 (0) | 2016.05.29 |
포스테깅 한 csv파일을 스태밍 한 후 csv파일로 내보내기(make stemming csv file from csv file) (0) | 2016.05.25 |
opennlp를 사용하여 csv파일을 가져와 명사 추출 하고 csv파일로 내보내기( extract noun from csv file with openlp) (0) | 2016.05.01 |