答疑

1、IDF的计算问题

【问题】

idf计算是不是错了?
image.png
idf计算结果
image.png
用底数为e或2都不是这个结果
image.png

【答复】
实际应用时,对这个公式进行了调整,
double idf = Math.log((1.0 + docCnt) / (1.0 + df));
对于你的例子
System.out.println(Math.log((1.0+2)/(1.0+1)));
结果正好为 0.4054651081081644

2、中、英文分词的问题

【问题】
问下 Segment对英文分词不起作用吗?

【答复】
是的,Segment仅支持中文分词,详见教程21.2.1节 中文分词。英文分词请参考教程21.2.2节 Tokenizer和RegexTokenizer

3、英文的切分

【问题】
对英文进行切分,比如thatisanenglishbook 分出 that is an english book,或者baidu ba ai id du bai aid idu 这样的

【答复】
第一种方式做不到,但是第二种方式,可以使用先有组件实现。需要用到教程23.3节中的NGram组件;教程21.2.2节中的RegexTokenizer,具体代码如下:

  1. new MemSourceBatchOp(new Object[] {"example"}, "txt")
  2. .link(
  3. new RegexTokenizerBatchOp()
  4. .setGaps(false)
  5. .setPattern(".")
  6. .setSelectedCol("txt")
  7. )
  8. .link(
  9. new NGramBatchOp()
  10. .setSelectedCol("txt")
  11. .setOutputCol("txt_2")
  12. .setN(2)
  13. )
  14. .link(
  15. new NGramBatchOp()
  16. .setSelectedCol("txt")
  17. .setOutputCol("txt_3")
  18. .setN(3)
  19. )
  20. .print();

运行结果为:

  1. txt|txt_2|txt_3
  2. ---|-----|-----
  3. e x a m p l e|e_x x_a a_m m_p p_l l_e|e_x_a x_a_m a_m_p m_p_l p_l_e

4、TF_IDF

【问题】
请问下alink里面有没有tf_idf这个模型可以用?

【答复】
有,参见教程21.4节 单词的区分度;在21.5.2节 有使用TF_IDF提取关键词的例子。