以下是我的示例数据:
maybe add a higher-level description
min of spare daemons
data in the appropriate order
the compiled max daemons
an iovec to store the trailer sent after the file
data in the wrong order
an iovec to store the headers sent before the file
return err maybe add a higher-level desc
if a user manually creates a data file
我想进行群集方法并自动将这些数据分类 同一个词出现在句子中,所以我想要实现的是这样的:
添加
可能会添加更高级别的描述
return err可能会添加更高级别的desc
damons
备用守护进程的分钟
已编译的最大守护进程
iovec的
用于存储在文件
之前发送的标题的iovec用于存储文件后发送的预告片的iovec
数据
数据顺序错误
适当顺序的数据
如果用户手动创建数据文件
有人能给我一些帮助吗?非常感谢你!
答案 0 :(得分:4)
听起来好像要找到最常用的字?
不是很难做到(而不是“聚集”,只是按照常用词计数和分组),你尝试了什么,你在哪里被困?
答案 1 :(得分:1)
我认为您专门寻找的是最小化覆盖。每个句子都可以被其中的任何一个词“覆盖”,你想要一组至少一次覆盖每个句子的单词,对吗?
你可以在https://en.wikipedia.org/wiki/Set_cover_problem专门阅读这类问题 - 事实上,在NP Complete中完全可以这样做。
一种方法是一个简单的贪婪算法,寻找一个涵盖大多数句子的单词(集合中最常见的单词,没有重复计算的句子),然后取出该组并继续前进到剩下的任何一个。
在很多情况下,这远非最佳,特别是如果您希望该组具有相似的大小。你实际上可能想要抛出太多的单词 - 例如,根据集合,“程序”可能出现在许多项目中,而与大多数项目并不特别相关。
在这种情况下,找到相关的内容就成了问题。也许为组的数量设置某种参数A是有意义的,然后你的程序可以针对每个给出大致N / A句子的单词?计算单词频率,寻找那个点(频率为N / A),然后慢慢添加单词直到覆盖所有内容。然后在最后一个阶段,以尝试组合一个公共集的子集,以使其整体更清洁。