我正在编写一本关于机器学习的书,他们给出了一个如何检查字符串输入的示例,以查看单词是否可能是另一个单词的拼写错误(在这种情况下,名人姓名的拼写不同)。运行示例后,所有输出都是0.0,.999或0.7071067811865475。我浏览了API,并且它能够提供0到1之间的一系列值,但我找不到任何解释这个问题的东西。我知道可能还有其他工具可以做同样的事情,但我想让这个工具正常工作。这是我用来测试它的代码。
import java.util.ArrayList;
import java.util.List;
import net.sf.classifier4J.ClassifierException;
import net.sf.classifier4J.vector.HashMapTermVectorStorage;
import net.sf.classifier4J.vector.TermVectorStorage;
import net.sf.classifier4J.vector.VectorClassifier;
public class BritneyDilemma {
public BritneyDilemma() {
List<String> terms = new ArrayList<String>();
terms.add("brittany spears");
terms.add("brittney spears");
terms.add("britany spears");
terms.add("britny spears");
terms.add("briteny spears");
terms.add("britteny spears");
terms.add("briney spears");
terms.add("brittny spears");
terms.add("brintey spears");
terms.add("britanny spears");
terms.add("britiny spears");
terms.add("britnet spears");
terms.add("britiney spears");
terms.add("britney spears");
terms.add("britney spearssssss");
terms.add("britne spessssss");
TermVectorStorage storage = new HashMapTermVectorStorage();
VectorClassifier vc = new VectorClassifier(storage);
String correctString = "britney spears";
for (String term : terms) {
try {
vc.teachMatch("britCatagory", correctString);
double result = vc.classify("britCatagory", term);
System.out.println(term + " = " + result);
}
catch (ClassifierException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) {
BritneyDilemma bd = new BritneyDilemma();
}
}`
答案 0 :(得分:2)
VectorClassifier
基本上将传入的字符串拆分为标记(单词)并检查它们是否出现在正确的字符串中(即传递给teachMatch
方法的字符串),同时考虑到频率这些字。 VectorClassifier
不计算单词的可能性。如果你查看它的源代码,你可以自己检查一下。
你有正确的姓氏&#34;长矛&#34;在每个字符串中,名称&#34; britney&#34;在大多数字符串中混乱,因此VectorClassifier找到一个匹配的单词和一个不匹配的单词。对于字符串&#34; britney spearssssss&#34;它还会找到一个匹配的单词(名称&#34; britney&#34;在这种情况下)和一个不匹配的单词(姓氏)。这就是为什么,对于所有这些字符串,VectorClassifier
会给出相同的结果。
对于完全匹配的字符串(&#34; britney spears&#34;),它会给出接近1的最佳分数。
对于没有匹配单词的字符串(&#34; britne spessssss&#34;),它给出零。
答案 1 :(得分:0)
Classifier4J字逐字逐句。它确实处理词干,但不处理拼写错误。为此,您最好查看edit distance算法。
(我写过Classifier4J)