java是分析和过滤独特句子的最佳算法?
我正在编写一些代码,把句子过滤成不同的组。 这些句子是由我的服务台处理过的事件记录单的描述组成的我必须根据5个类别对它们进行过滤;笔记本电脑、电话、网络、打印机、应用程序
应用程序目录中的一个描述示例是:“请在XXXX YYYY笔记本电脑上安装CMS”
我明白要做到完美是不可能的。但我想知道解决这个问题的最好方法是什么?从示例中可以看出,它属于应用程序类别,但包含关键字“laptop”
如果有更多的信息我可以提供给你,请让我知道。积少成多。谢谢
你可以在下面搜索框中键入要查询的问题!
我必须根据5个类别对它们进行过滤;笔记本电脑、电话、网络、打印机、应用程序
应用程序目录中的一个描述示例是:“请在XXXX YYYY笔记本电脑上安装CMS”
我明白要做到完美是不可能的。但我想知道解决这个问题的最好方法是什么?从示例中可以看出,它属于应用程序类别,但包含关键字“laptop”
如果有更多的信息我可以提供给你,请让我知道。积少成多。谢谢
# 1 楼答案
这实际上是一个机器学习问题(文本分类),可以使用多种算法来解决:支持向量机、多项式逻辑回归、朴素贝叶斯等等
有很多库可以帮助您,这里有一个(java) http://alias-i.com/lingpipe/demos/tutorial/classify/read-me.html
python还有一个非常好的库: http://scikit-learn.org/stable/tutorial/text_analytics/working_with_text_data.html#training-a-classifier
如果您想采用这种方法,您将需要一个训练数据集,这意味着您需要手动标记一组文档,算法将使用这些文档自动了解哪些关键字是重要的
希望有帮助
# 2 楼答案
为不同类别维护不同的列表或队列。 收到句子后,检查该句子中是否出现关键字,并添加/推送到相应的列表/队列
您可以维护一个地图,告诉您哪个关键字对应哪个列表/队列
# 3 楼答案
有趣的问题!如您的示例所示,同一个句子中可能有多个关键字,因此很难破译该句子将属于哪个类别
为了避免这种情况,我建议可能对每个类别使用单独的优先级队列,按照优先级顺序为每个类别包含关键字
例如,您将拥有应用程序类别的关键字优先级队列,并且(在该优先级队列中)“安装”的优先级将高于“笔记本电脑”或“计算机”,因为“安装”与应用程序的关系比“笔记本电脑”更密切
在你选择一个句子属于哪个类别的算法中,我会在所有五个优先级队列中进行循环搜索,直到找到匹配项——所有五个类别中优先级最高的匹配项会得到这个句子。这是我能想到的一个可能的解决办法
注意:为了让它正常工作,当然重要的是要仔细挑选哪些关键词进入哪些类别;例如,在膝上型电脑类别中,将“膝上型电脑”作为优先级最高的关键字似乎是很自然的,但是,这会导致很多冲突,因为膝上型电脑可能是句子中非常常用的一个词。您应该拥有与每个类别相关的非常特定的关键字,而不是像“laptop”(或者“laptop”是一个非常低优先级的关键字)这样的宽泛/表面级关键字
# 4 楼答案
如果你只能通过接收这些句子和发送/执行逻辑来达到目的, 为什么不直接用正则表达式过滤它们呢? 比如说,, Regex to find a specific word in a string in java
例如
# 5 楼答案
你看到的是关键词“笔记本电脑”。但有一个关键字install“install”,它主要讲述一些应用程序的安装
所以你可以试试看
如果您遵守代码,应用程序类别将放在第一位,因为它与膝上型电脑的术语相匹配。通过这段代码,我们试图把这句话归入笔记本电脑的范畴
可以使用循环检查所有条件。可以将关键字添加到每个类别的“指定”列表中