NLP標籤/關鍵詞-提取工具-java開發

風蕭蕭1999發表於2020-10-30

一、簡介

旨在幫助使用者自動挖掘文字標籤,是特徵關鍵詞提取工具,工具中整合了TextRank、TF-IDF演算法、詞跨度(SPAN)演算法和LDA主題模型演算法。

使用方法:

二、使用方法

2.1.TextRank

2.1.1.理論

參考:https://blog.csdn.net/u012998680/article/details/107713952

2.1.2.呼叫方法

public static void main(String[] args) {
    String field = "6個小動作 讓你秒秒都能瘦     這是一套小動作組成的瘦身操。看過之後你會覺得,原來真的可以無處不在,生活中的任何一個細節,都可以抓緊機會鍛鍊和減肥的,真是太簡單了。       1、 門框斜壓收內側贅肉方法:身體離門框約1步距離,手摸門框下壓,左右各3秒鐘。      效果:平日運動不到的身體內側可以得到很好的拉伸。      2、刷杯子瘦手臂 方法:手臂儘量抬高,做刷杯子的動作,換手再做10分鐘。      效果:收緊手臂,緊緻乳房。      3、 反手拿重物提臀瘦手臂方法:雙手在身體後面做提拉重物動作。      效果:一週臀線上升2,手臂纖細2。      4、 讀書收腹減腿法方法:坐在椅子上讀書的時候雙膝之間夾毛巾,保持毛巾不掉下來即可。      效果:收緊肚子、大腿贅肉。      5、開門瘦四肢方法:。雙手交換做開拉門的動作;。雙腳交換做開拉門的動作。      效果:拉伸四肢贅肉,雕塑四肢線條。        //          6、金雞獨立穿鞋瘦腰 動作:單腳站立做穿鞋的動作。      效果:伸拉腰部贅肉,直接瘦腰。    (實習編輯:李紫嫣)   ";
    List<String> keywords = Demo.textRank(field,10);
    System.out.println("關鍵詞:" + keywords);
}

2.1.3.結果

效果, 動作, 方法, 贅肉, 門框, 手臂, 身體, 小動作, 四肢, 瘦腰

2.2.tf-idf演算法

2.2.1.理論:

參考:https://blog.csdn.net/u012998680/article/details/107713952

2.2.2.訓練模型

@Test
public void IDFModelFit() throws Exception {
     IDFModelOption option = new IDFModelOption()
			.setMinFrequencey(2)
			.setDir("data/")
			.setModelDir("model/IDF/");
     IDFModel model = new IDFModel(option);
     model.fit();
}

2.2.3.呼叫方法

@Test
public void ldaTest() throws Exception {
      Option option = new Option()
		.setMetric(Metric.AVERAGE)
		.setStrategies(StrategyMetrics.IDF)
		.setModelOptions(new IDFModelOption())
		.setFilter(MyStopRecognition.getInstance()); 
      LabelHelper helper = new LabelHelper(option).build();
      String str = "6個小動作 讓你秒秒都能瘦     這是一套小動作組成的瘦身操。看過之後你會覺得,原來真的可以無處不在,生活中的任何一個細節,都可以抓緊機會鍛鍊和減肥的,真是太簡單了。       1、 門框斜壓收內側贅肉方法:身體離門框約1步距離,手摸門框下壓,左右各3秒鐘。      效果:平日運動不到的身體內側可以得到很好的拉伸。      2、刷杯子瘦手臂 方法:手臂儘量抬高,做刷杯子的動作,換手再做10分鐘。      效果:收緊手臂,緊緻乳房。      3、 反手拿重物提臀瘦手臂方法:雙手在身體後面做提拉重物動作。      效果:一週臀線上升2,手臂纖細2。      4、 讀書收腹減腿法方法:坐在椅子上讀書的時候雙膝之間夾毛巾,保持毛巾不掉下來即可。      效果:收緊肚子、大腿贅肉。      5、開門瘦四肢方法:。雙手交換做開拉門的動作;。雙腳交換做開拉門的動作。      效果:拉伸四肢贅肉,雕塑四肢線條。        //          6、金雞獨立穿鞋瘦腰 動作:單腳站立做穿鞋的動作。      效果:伸拉腰部贅肉,直接瘦腰。    (實習編輯:李紫嫣)   ";
      List<KeywordLabel> labels = helper.predict(str, 10);
      for (KeywordLabel keywordLabel : labels) {
	System.out.println(keywordLabel);
      }
}

2.2.4.結果

門框=3.664074638671668

拉門=3.6097760747158785

穿鞋=3.040698275381654

小動作=2.5687126373035953

四肢=2.5614579554770067

斜壓=2.553252568940863

贅肉=2.5139555911034943

重物=2.3745791096209836

杯子=2.3572229308186

讀書=2.2068687144082118

手摸=2.1985823826579303 

2.3.詞跨度演算法

2.3.1.理論:

詞跨度是指一個詞或者短語字文中首次出現和末次出現之間的距離,詞跨度越大說明這個詞對文字越重要,可以反映文字的主題。一個詞的跨度計算公式如下:

其中,lasti表示詞i在文字中最後出現的位置, firsti表示詞 i 在文字中第一次出現的位置,sum表示文字中詞的總數。

詞跨度被作為提取關鍵詞的方法是因為在現實中,文字中總是有很多噪聲(指不是關鍵詞的那些詞),使用詞跨度可以減少這些噪聲。

 

2.3.2.呼叫方法

@Test
public void ldaTest() throws Exception {
      Option option = new Option()
		.setMetric(Metric.AVERAGE)
		.setStrategies(StrategyMetrics.SPAN)
		.setModelOptions(new WordSpanModelOption())
		.setFilter(MyStopRecognition.getInstance());
      LabelHelper helper = new LabelHelper(option).build();
      String str = "6個小動作 讓你秒秒都能瘦	  這是一套小動作組成的瘦身操。看過之後你會覺得,原來真的可以無處不在,生活中的任何一個細節,都可以抓緊機會鍛鍊和減肥的,真是太簡單了。       1、 門框斜壓收內側贅肉方法:身體離門框約1步距離,手摸門框下壓,左右各3秒鐘。      效果:平日運動不到的身體內側可以得到很好的拉伸。      2、刷杯子瘦手臂 方法:手臂儘量抬高,做刷杯子的動作,換手再做10分鐘。      效果:收緊手臂,緊緻乳房。      3、 反手拿重物提臀瘦手臂方法:雙手在身體後面做提拉重物動作。      效果:一週臀線上升2,手臂纖細2。      4、 讀書收腹減腿法方法:坐在椅子上讀書的時候雙膝之間夾毛巾,保持毛巾不掉下來即可。      效果:收緊肚子、大腿贅肉。      5、開門瘦四肢方法:。雙手交換做開拉門的動作;。雙腳交換做開拉門的動作。      效果:拉伸四肢贅肉,雕塑四肢線條。        //          6、金雞獨立穿鞋瘦腰 動作:單腳站立做穿鞋的動作。      效果:伸拉腰部贅肉,直接瘦腰。    (實習編輯:李紫嫣) ";
      List<KeywordLabel> labels = helper.predict(str, 20);
      for (KeywordLabel keywordLabel : labels) {
	System.out.println(keywordLabel);
      }
}

2.3.3.呼叫方法

贅肉=0.82

效果=0.72

動作=0.58

方法=0.56

拉伸=0.53

身體=0.3

雙手=0.28

收緊=0.27

手臂=0.21

四肢=0.16 

2.4.LDA主題模型演算法

2.4.1.理論:

參考:https://blog.csdn.net/u012998680/article/details/108853280

2.4.2.訓練模型

@Test
public void LDAModelFit() throws Exception {
      LDAModelOption option = new LDAModelOption()
		.setDir("data/") //訓練檔案
		.setModelDir("model/LDA/")	//模型儲存資料夾
		.setModelName("model-final")//模型多次迭代,預設選擇最後一輪結果
              		.setNiters(100)//迭代輪次
		.setTwords(20)//top詞數
		.setK(100);//主題數量
      LDAModel model = new LDAModel(option);
      model.fit();
}

2.4.3.呼叫方法

@Test
public void ldaTest() throws Exception {
      Option option = new Option()
		.setMetric(Metric.AVERAGE)
		.setStrategies(StrategyMetrics.LDA)
		.setModelOptions(new LDAModelOption());
      LabelHelper helper = new LabelHelper(option).build();
      String str = "6個小動作 讓你秒秒都能瘦     這是一套小動作組成的瘦身操。看過之後你會覺得,原來真的可以無處不在,生活中的任何一個細節,都可以抓緊機會鍛鍊和減肥的,真是太簡單了。       1、 門框斜壓收內側贅肉方法:身體離門框約1步距離,手摸門框下壓,左右各3秒鐘。      效果:平日運動不到的身體內側可以得到很好的拉伸。      2、刷杯子瘦手臂 方法:手臂儘量抬高,做刷杯子的動作,換手再做10分鐘。      效果:收緊手臂,緊緻乳房。      3、 反手拿重物提臀瘦手臂方法:雙手在身體後面做提拉重物動作。      效果:一週臀線上升2,手臂纖細2。      4、 讀書收腹減腿法方法:坐在椅子上讀書的時候雙膝之間夾毛巾,保持毛巾不掉下來即可。      效果:收緊肚子、大腿贅肉。      5、開門瘦四肢方法:。雙手交換做開拉門的動作;。雙腳交換做開拉門的動作。      效果:拉伸四肢贅肉,雕塑四肢線條。        //          6、金雞獨立穿鞋瘦腰 動作:單腳站立做穿鞋的動作。      效果:伸拉腰部贅肉,直接瘦腰。    (實習編輯:李紫嫣)   ";
      List<KeywordLabel> labels = helper.predict(str, 10);
      for (KeywordLabel keywordLabel : labels) {
	System.out.println(keywordLabel);
      }
}

2.4.4.結果

動作=3.8887724510139923

身體=2.661365600884695

運動=2.3764437116685673

雙手=1.49493318442435

鍛鍊=1.469841001945945

手臂=1.0400248680048332

大腿=0.9809437721154729

編輯=0.700652470796032

實習=0.6795867783590948

雙腳=0.6585776522809864

 

三、應用分析

四個工具的關鍵詞提取效果其實差距不大,總體來看 TextRank≈SPAN > LDA > TF-IDF,執行速率也無明顯差別,可根據專案需求選用(個人推薦TextRank、SPAN,不用訓練模型).

相關文章