我正在编写一些代码来将句子过滤到不同的组中。 句子是由我的服务台处理的事故单的描述形成的。
我必须根据5个catergories过滤它们;笔记本电脑,电话,网络,打印机,应用程序。
应用程序catergory的描述示例如下:“请在XXXX YYYYYYY笔记本电脑上安装CMS”
我知道要完美无瑕。但我想知道解决这个问题的最佳方法是什么?从示例中可以看出,它属于应用程序类别,但包含关键字“laptop”。
如果我能提供更多信息,请告诉我。每一点都有帮助。感谢
答案 0 :(得分:0)
维护不同类别的不同列表或队列。 当您收到句子时,检查该句子中的关键字出现并添加/推送到适当的列表/队列。
您可以维护一张地图,告诉您哪个关键字的列表/队列。
答案 1 :(得分:0)
如果你只接受这些句子并发送/做逻辑, 为什么不用正则表达式过滤它们呢? 例如,见 Regex to find a specific word in a string in java
e.g。
List<String> LaptopList = new ArrayList<String>();
for (String item : sentenceList) {
if item.matches(".*\\blaptop\\b.*"){
LaptopList.add(item);
}
}
答案 2 :(得分:0)
有趣的问题!如您的示例所示,同一个句子中可能有多个关键字,因此很难解读句子属于哪个类别。
为了解决这个问题,我建议可能为每个类别使用一个单独的优先级队列,按优先级顺序包含每个类别的关键字。
例如,您将拥有应用程序类别的关键字优先级队列,并且(在该优先级队列中)&#34;安装&#34;优先于&#34;笔记本电脑&#34;或&#34;计算机&#34;,因为&#34;安装&#34;与应用程序的关系比#34;笔记本电脑&#34;。
更紧密在您选择句子属于哪个类别的算法中,我会对所有五个优先级队列进行循环搜索,直到找到匹配为止 - 所有五个类别中的最高优先级匹配都会使用该句子。这是我能想到的一种可能的解决方案。
注意:为了使其正常工作,当然重要的是要仔细挑选哪些关键字进入哪些类别;例如,在笔记本电脑类别中,拥有&#34;笔记本电脑&#34;是最高优先级的关键字 - 然而,这会导致很多冲突,因为笔记本电脑可能是句子中非常常用的单词。您应该拥有与每个类别相关的非常具体的关键字,而不是具有广泛/表面级别的关键字,例如&#34; laptop&#34; (或者&#34;笔记本电脑&#34;是一个非常低优先级的关键字)。
答案 3 :(得分:0)
这实际上是一个机器学习问题(文本分类),您可以使用几种算法解决这些问题:支持向量机,多项逻辑回归,朴素贝叶斯等。
有很多图书馆可以帮到你,这里有一个(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
如果您想采用这种方法,您将需要一个训练数据集,这意味着您需要手动标记一组文档,算法将使用这些文档自动了解哪些关键字很重要。
希望它有所帮助!
答案 4 :(得分:0)
您正在查看关键字&#34;笔记本电脑&#34;。但是有一个关键字install&#34; install&#34;哪个主要讲述了一些应用程序的安装。
所以你可以试试
if( sentence.contains("install") || (sentence.contains("install") && sentence.contains("laptop") )
{
applicationTickets.add(sentence);
}
else if(sentence.contains("laptop") || other conditions)
{
laptopTickets.add(sentence);
}
else if( )
..........
else if( )
..........
如果您观察代码,则首先放置应用程序类别,因为它与笔记本电脑的条款匹配。因此,通过此代码尝试将该句子降为笔记本电脑类别。
您可以使用循环来检查所有条件。可以将关键字添加到每个类别的指定列表中。