jsksxs360 / Word2Vec

对 ansj 编写的 Word2VEC_java 的进一步包装,同时实现了常用的词语相似度和句子相似度计算。
Apache License 2.0
176 stars 81 forks source link

Exception in thread "main" java.lang.NoClassDefFoundError: org/ansj/recognition/Recognition at Hello.hello.main(hello.java:34) #3

Closed PapaMadeleine2022 closed 7 years ago

PapaMadeleine2022 commented 7 years ago

您好,对您的代码很感兴趣,但是当我执行下面的代码:

package Hello;
import java.io.IOException;
import java.util.List;
import java.util.Set;
import me.xiaosheng.util.Segment;
import me.xiaosheng.word2vec.*;
public class hello {
    public static void main(String[] args) throws Exception
    {
        Word2Vec vec = new Word2Vec();
        try {
            vec.loadGoogleModel("/home/ztgong/work/language/datasets/wiki_chinese_word2vec(Google).model");
        } catch (IOException e) {
            e.printStackTrace();
        }   
        String s1 = "苏州有多条公路正在施工,造成局部地区汽车行驶非常缓慢。";
        String s2 = "苏州最近有多条公路在施工,导致部分地区交通拥堵,汽车难以通行。";
        String s3 = "苏州是一座美丽的城市,四季分明,雨量充沛。";

        //分词,获取词语列表
        List<String> wordList1 = Segment.getWords(s1);
        List<String> wordList2 = Segment.getWords(s2);
        List<String> wordList3 = Segment.getWords(s3);

        //句子相似度(所有词语权值设为1)
        System.out.println("s1|s1: " + vec.sentenceSimilarity(wordList1, wordList1));
        System.out.println("s1|s2: " + vec.sentenceSimilarity(wordList1, wordList2));
        System.out.println("s1|s3: " + vec.sentenceSimilarity(wordList1, wordList3));

        //句子相似度(名词、动词权值设为1,其他设为0.8)
        float[] weightArray1 = Segment.getPOSWeightArray(Segment.getPOS(s1));
        float[] weightArray2 = Segment.getPOSWeightArray(Segment.getPOS(s2));
        float[] weightArray3 = Segment.getPOSWeightArray(Segment.getPOS(s3));
        System.out.println("s1|s1: " + vec.sentenceSimilarity(wordList1, wordList1, weightArray1, weightArray1));
        System.out.println("s1|s2: " + vec.sentenceSimilarity(wordList1, wordList2, weightArray1, weightArray2));
        System.out.println("s1|s3: " + vec.sentenceSimilarity(wordList1, wordList3, weightArray1, weightArray3));
    }
}

显示错误如下:

Exception in thread "main" java.lang.NoClassDefFoundError: org/ansj/recognition/Recognition
    at Hello.hello.main(hello.java:34)
Caused by: java.lang.ClassNotFoundException: org.ansj.recognition.Recognition
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:335)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 1 more

该怎么修复呢? 谢谢!!

jsksxs360 commented 7 years ago

你好,这里的分词工具类 Segment 是对 Ansj中文分词 进行的包装,所以需要在你的项目中引入 ansj_seg-5.0.2-all-in-one.jar。 希望这能解决你的问题。

PapaMadeleine2022 commented 7 years ago

@jsksxs360 是这个问题。非常感谢您!

lfeng1205 commented 6 years ago

您好 添加了ansj_seg-5.0.2-all-in-one.jar。之后还是报Exception in thread "main" java.lang.NoClassDefFoundError: org/ansj/recognition/Recognition错误 请问是问什么呢