Ruby 一个拖延了一年多的问题

ma_fan · 发布于 2017年11月17日 · 最后由 116447729 回复于 2017年11月18日 · 908 次阅读
6986

举例描述

一篇文章如下:

四季 草芽尖尖,他对小鸟说:“我是春天。”荷叶圆圆,他对青蛙说:“我是夏天。”谷穗弯弯,他鞠着躬说:“我是秋天。”雪人大肚子一挺,他顽皮地说:“我就是冬天。”

第一步操作:把里面的文字切成单字,并统计出现的次数:

  1. 四 1; 2. 季 1, 3. 草 1, 4. 芽 1, 5. 小 1, 6. 鸟 1, 7. 春 1, 8. 荷 1, 9. 叶 1, 10. 青 1, 11. 蛙 1, 12. 夏 1, 13. 谷 1, 14. 穗 1, 15. 鞠 1, 16. 着 1, 17. 躬 1, 18. 秋 1, 19. 雪 1, 20. 人 1, 21. 大 1, 22. 肚 1, 23. 子 1, 24. 一 1, 25. 挺 1, 26. 顽 1, 27. 皮 1, 28. 地 1, 29. 就 1, 30. 冬 1, 31. 尖 2, 32. 对 2, 33. 圆 2, 34. 弯 2, 35. 他 4, 36. 说 4, 37. 我 4, 38. 是 4, 39. 天 4

第二部操作:接下来统计每个字出现的次数、出现的位置之和,经过排序,可以得出一个字序表:

  1. 他 ; 2. 说 ; 3. 我 ; 4. 是 ; 5. 天 ; 6. 尖; 7. 对 ; 8. 圆 ; 9. 弯 ; 10. 四 ; 11. 季 ; 12. 草 ; 13. 芽 ; 14. 小 ; 15. 鸟 ; 16. 春; 17. 荷; 18. 叶 ; 19. 青; 20. 蛙; 21. 夏; 22. 谷 ; 23. 穗 ; 24. 鞠; 25. 着; 26. 躬; 27. 秋; 28. 雪; 29. 人 ; 30. 大; 31. 肚; 32. 子 ; 33. 一; 34. 挺; 35. 顽; 36. 皮; 37. 地 ; 38. 就; 39. 冬;

纠结出现

问题正是这个字序表:所有的次数差异和位置差异,都被简化了。

所以需要取消排序。可是如果取消排序,该怎么表达字间的差异呢?

次数差异可以用Z分数表示,

位置差异呢?应该用什么数字来表示呢?

有什么方法可以次数差异和位置差异统一起来,用一个数字来表达呢?

最后,有没有什么gem好处理这种问题呢?

问到这个程度,真觉得自己有些猥琐了 :)大家不要见怪。

共收到 3 条回复
9861

实际的需求是什么?还是你只是单纯的想把次数差异和位置差异统一起来,用一个数字来表达

2880

一般做全文搜索都不用计算顺序的, 纯粹用 bag of words (BOW) 做索引. 你可以看看常用的 TF-IDF 函数怎么做的 (TF-IDF 很多变种, 据说 TF 和 IDF 都换成 information gain 效果最好).

中文其实都不用分词, 直接以字和 n-gram 为单位做. n-gram 代替分词的好处是能把词之间的关系都记录下来.

对于如何表达句和句之间甚至更广的顺序, 可以考虑 skip-gram 和 CBOW.

还是要学习一个.

96

先看下

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册