NLP4J [004] Java로 자연 언어 처리와 구문 분석의 통계 처리를 사용해 텍스트 분석을 해본다
NLP4J를 사용하여 형태소 해석 결과와 간단한 통계 처리를 이용하여 텍스트 분석을 해 봅니다.
반복하지만,
「형태소 해석」이나 「구문 해석」은 요리로 말하면 「부엌칼의 사용법」에 가까운 느낌입니다.
「형태소 해석」이나 「구문 해석」에 가세해 「통계 처리」를 넣으면 텍스트 분석=요리에 가까워지는 것은 아닐까 생각합니다.
여기서 통계 처리는 간단한 것을 이용합니다만, 기계 학습이나 복잡한 통계 처리를 넣어 보는 것도 좋다고 생각합니다.
이제 여기에 다음과 같은 문서가 있다고 가정합니다. 한 줄이 한 레코드입니다.
"Toyota", "ハイブリッドカーを作っています。"
"Toyota", "ハイブリッドカーを売っています。"
"Toyota", "自動車を作っています。"
"Toyota", "自動車を売っています。"
"Nissan", "EVを作っています。"
"Nissan", "EVを売っています。"
"Nissan", "自動車を売っています。"
"Nissan", "ルノーと提携しています。"
"Nissan", "軽自動車を売っています。"
"Honda", "自動車を作っています。"
"Honda", "自動車を売っています。"
"Honda", "バイクを作っています。"
"Honda", "バイクを売っています。"
"Honda", "軽自動車を売っています。"
"Honda", "軽自動車を作っています。"
문서를 'Toyota', 'Nissan', 'Honda'로 나누어 생각했을 때 '특징적인'계속받는'키워드'는 무엇일까요?
특징적인 키워드를 NLP4J를 사용하여 내 보겠습니다. (어려운 처리는 하지 않습니다)
구문 분석을 사용하고, 통계 처리를 「SimpleDocumentIndex」클래스를 사용해 실시하고 있는 곳이 포인트입니다.
Maven
<dependency>
<groupId>org.nlp4j</groupId>
<artifactId>nlp4j</artifactId>
<version>1.0.0.0</version>
</dependency>
코드1
public class HelloTextMiningMain2B {
public static void main(String[] args) throws Exception {
// ドキュメントの用意(CSVを読み込むなどでも可)
List<Document> docs = new ArrayList<Document>();
{
docs.add(createDocument("Toyota", "ハイブリッドカーを作っています。"));
docs.add(createDocument("Toyota", "ハイブリッドカーを売っています。"));
docs.add(createDocument("Toyota", "自動車を作っています。"));
docs.add(createDocument("Toyota", "自動車を売っています。"));
docs.add(createDocument("Nissan", "EVを作っています。"));
docs.add(createDocument("Nissan", "EVを売っています。"));
docs.add(createDocument("Nissan", "自動車を売っています。"));
docs.add(createDocument("Nissan", "ルノーと提携しています。"));
docs.add(createDocument("Nissan", "軽自動車を売っています。"));
docs.add(createDocument("Honda", "自動車を作っています。"));
docs.add(createDocument("Honda", "自動車を売っています。"));
docs.add(createDocument("Honda", "バイクを作っています。"));
docs.add(createDocument("Honda", "バイクを売っています。"));
docs.add(createDocument("Honda", "軽自動車を売っています。"));
docs.add(createDocument("Honda", "軽自動車を作っています。"));
}
// 形態素解析アノテーター+構文解析アノテーター
DocumentAnnotator annotator = new YjpAllAnnotator(); // 形態素解析+構文解析
{
System.err.println("形態素解析+構文解析");
long time1 = System.currentTimeMillis();
// 形態素解析+構文解析
annotator.annotate(docs);
long time2 = System.currentTimeMillis();
System.err.println("処理時間[ms]:" + (time2 - time1));
}
// キーワードインデックス(統計処理)の用意
Index index = new SimpleDocumentIndex();
{
System.err.println("インデックス作成");
long time1 = System.currentTimeMillis();
// キーワードインデックス作成処理
index.addDocuments(docs);
long time2 = System.currentTimeMillis();
System.err.println("処理時間[ms]:" + (time2 - time1));
}
{
// 「名詞...動詞」でNissanに共起性の高いキーワードの取得
List<Keyword> kwds = index.getKeywords("名詞...動詞", "item=Nissan");
System.out.println("名詞...動詞 for Nissan");
for (Keyword kwd : kwds) {
System.out.println(String.format("count=%d,correlation=%.1f,lex=%s", kwd.getCount(),
kwd.getCorrelation(), kwd.getLex()));
}
}
{
// 「名詞...動詞」でToyotaに共起性の高いキーワードの取得
List<Keyword> kwds = index.getKeywords("名詞...動詞", "item=Toyota");
System.out.println("名詞...動詞 for Toyota");
for (Keyword kwd : kwds) {
System.out.println(String.format("count=%d,correlation=%.1f,lex=%s", kwd.getCount(),
kwd.getCorrelation(), kwd.getLex()));
}
}
{
// 「名詞...動詞」でHondaに共起性の高いキーワードの取得
List<Keyword> kwds = index.getKeywords("名詞...動詞", "item=Honda");
System.out.println("名詞...動詞 for Honda");
for (Keyword kwd : kwds) {
System.out.println(String.format("count=%d,correlation=%.1f,lex=%s", kwd.getCount(),
kwd.getCorrelation(), kwd.getLex()));
}
}
}
static Document createDocument(String item, String text) {
Document doc = new DefaultDocument();
doc.putAttribute("item", item);
doc.setText(text);
return doc;
}
}
Output
形態素解析+構文解析
処理時間[ms]:9618
インデックス作成
処理時間[ms]:3
名詞...動詞 for Nissan
count=1,correlation=3.0,lex=EV...売る
count=1,correlation=3.0,lex=EV...作る
count=1,correlation=1.5,lex=軽自動車...売る
count=1,correlation=1.0,lex=自動車...売る
名詞...動詞 for Toyota
count=1,correlation=3.8,lex=カー...売る
count=1,correlation=3.8,lex=カー...作る
count=1,correlation=3.8,lex=ハイブリッド...売る
count=1,correlation=3.8,lex=ハイブリッド...作る
count=1,correlation=1.9,lex=自動車...作る
count=1,correlation=1.3,lex=自動車...売る
名詞...動詞 for Honda
count=1,correlation=2.5,lex=バイク...売る
count=1,correlation=2.5,lex=軽自動車...作る
count=1,correlation=2.5,lex=バイク...作る
count=1,correlation=1.3,lex=自動車...作る
count=1,correlation=1.3,lex=軽自動車...売る
count=1,correlation=0.8,lex=自動車...売る
간단하네요!
이런 결과가 되었습니다!
인간의 감각과 맞습니까?
색인으로 돌아가기 : [003] 품사의 통계 처리 > [004] 구문 분석 통계 처리 > [005-1] NLP4J+Twitter4J(데이터 수집)
프로젝트 URL
htps //w w. nlp4j. rg/
Reference
이 문제에 관하여(NLP4J [004] Java로 자연 언어 처리와 구문 분석의 통계 처리를 사용해 텍스트 분석을 해본다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/oyahiroki/items/257b2d730fc71366fbcc
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
<dependency>
<groupId>org.nlp4j</groupId>
<artifactId>nlp4j</artifactId>
<version>1.0.0.0</version>
</dependency>
public class HelloTextMiningMain2B {
public static void main(String[] args) throws Exception {
// ドキュメントの用意(CSVを読み込むなどでも可)
List<Document> docs = new ArrayList<Document>();
{
docs.add(createDocument("Toyota", "ハイブリッドカーを作っています。"));
docs.add(createDocument("Toyota", "ハイブリッドカーを売っています。"));
docs.add(createDocument("Toyota", "自動車を作っています。"));
docs.add(createDocument("Toyota", "自動車を売っています。"));
docs.add(createDocument("Nissan", "EVを作っています。"));
docs.add(createDocument("Nissan", "EVを売っています。"));
docs.add(createDocument("Nissan", "自動車を売っています。"));
docs.add(createDocument("Nissan", "ルノーと提携しています。"));
docs.add(createDocument("Nissan", "軽自動車を売っています。"));
docs.add(createDocument("Honda", "自動車を作っています。"));
docs.add(createDocument("Honda", "自動車を売っています。"));
docs.add(createDocument("Honda", "バイクを作っています。"));
docs.add(createDocument("Honda", "バイクを売っています。"));
docs.add(createDocument("Honda", "軽自動車を売っています。"));
docs.add(createDocument("Honda", "軽自動車を作っています。"));
}
// 形態素解析アノテーター+構文解析アノテーター
DocumentAnnotator annotator = new YjpAllAnnotator(); // 形態素解析+構文解析
{
System.err.println("形態素解析+構文解析");
long time1 = System.currentTimeMillis();
// 形態素解析+構文解析
annotator.annotate(docs);
long time2 = System.currentTimeMillis();
System.err.println("処理時間[ms]:" + (time2 - time1));
}
// キーワードインデックス(統計処理)の用意
Index index = new SimpleDocumentIndex();
{
System.err.println("インデックス作成");
long time1 = System.currentTimeMillis();
// キーワードインデックス作成処理
index.addDocuments(docs);
long time2 = System.currentTimeMillis();
System.err.println("処理時間[ms]:" + (time2 - time1));
}
{
// 「名詞...動詞」でNissanに共起性の高いキーワードの取得
List<Keyword> kwds = index.getKeywords("名詞...動詞", "item=Nissan");
System.out.println("名詞...動詞 for Nissan");
for (Keyword kwd : kwds) {
System.out.println(String.format("count=%d,correlation=%.1f,lex=%s", kwd.getCount(),
kwd.getCorrelation(), kwd.getLex()));
}
}
{
// 「名詞...動詞」でToyotaに共起性の高いキーワードの取得
List<Keyword> kwds = index.getKeywords("名詞...動詞", "item=Toyota");
System.out.println("名詞...動詞 for Toyota");
for (Keyword kwd : kwds) {
System.out.println(String.format("count=%d,correlation=%.1f,lex=%s", kwd.getCount(),
kwd.getCorrelation(), kwd.getLex()));
}
}
{
// 「名詞...動詞」でHondaに共起性の高いキーワードの取得
List<Keyword> kwds = index.getKeywords("名詞...動詞", "item=Honda");
System.out.println("名詞...動詞 for Honda");
for (Keyword kwd : kwds) {
System.out.println(String.format("count=%d,correlation=%.1f,lex=%s", kwd.getCount(),
kwd.getCorrelation(), kwd.getLex()));
}
}
}
static Document createDocument(String item, String text) {
Document doc = new DefaultDocument();
doc.putAttribute("item", item);
doc.setText(text);
return doc;
}
}
Output
形態素解析+構文解析
処理時間[ms]:9618
インデックス作成
処理時間[ms]:3
名詞...動詞 for Nissan
count=1,correlation=3.0,lex=EV...売る
count=1,correlation=3.0,lex=EV...作る
count=1,correlation=1.5,lex=軽自動車...売る
count=1,correlation=1.0,lex=自動車...売る
名詞...動詞 for Toyota
count=1,correlation=3.8,lex=カー...売る
count=1,correlation=3.8,lex=カー...作る
count=1,correlation=3.8,lex=ハイブリッド...売る
count=1,correlation=3.8,lex=ハイブリッド...作る
count=1,correlation=1.9,lex=自動車...作る
count=1,correlation=1.3,lex=自動車...売る
名詞...動詞 for Honda
count=1,correlation=2.5,lex=バイク...売る
count=1,correlation=2.5,lex=軽自動車...作る
count=1,correlation=2.5,lex=バイク...作る
count=1,correlation=1.3,lex=自動車...作る
count=1,correlation=1.3,lex=軽自動車...売る
count=1,correlation=0.8,lex=自動車...売る
간단하네요!
이런 결과가 되었습니다!
인간의 감각과 맞습니까?
색인으로 돌아가기 : [003] 품사의 통계 처리 > [004] 구문 분석 통계 처리 > [005-1] NLP4J+Twitter4J(데이터 수집)
프로젝트 URL
htps //w w. nlp4j. rg/
Reference
이 문제에 관하여(NLP4J [004] Java로 자연 언어 처리와 구문 분석의 통계 처리를 사용해 텍스트 분석을 해본다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/oyahiroki/items/257b2d730fc71366fbcc
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
形態素解析+構文解析
処理時間[ms]:9618
インデックス作成
処理時間[ms]:3
名詞...動詞 for Nissan
count=1,correlation=3.0,lex=EV...売る
count=1,correlation=3.0,lex=EV...作る
count=1,correlation=1.5,lex=軽自動車...売る
count=1,correlation=1.0,lex=自動車...売る
名詞...動詞 for Toyota
count=1,correlation=3.8,lex=カー...売る
count=1,correlation=3.8,lex=カー...作る
count=1,correlation=3.8,lex=ハイブリッド...売る
count=1,correlation=3.8,lex=ハイブリッド...作る
count=1,correlation=1.9,lex=自動車...作る
count=1,correlation=1.3,lex=自動車...売る
名詞...動詞 for Honda
count=1,correlation=2.5,lex=バイク...売る
count=1,correlation=2.5,lex=軽自動車...作る
count=1,correlation=2.5,lex=バイク...作る
count=1,correlation=1.3,lex=自動車...作る
count=1,correlation=1.3,lex=軽自動車...売る
count=1,correlation=0.8,lex=自動車...売る
htps //w w. nlp4j. rg/
Reference
이 문제에 관하여(NLP4J [004] Java로 자연 언어 처리와 구문 분석의 통계 처리를 사용해 텍스트 분석을 해본다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/oyahiroki/items/257b2d730fc71366fbcc텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)