从Java中获取Moby Grady同义词库的同义词的最佳方法是什么?

时间:2014-04-07 22:27:19

标签: java arrays parsing dictionary thesaurus

我正在创建一个视觉词库,它将充当这里显示的淡化版本: https://www.visualthesaurus.com/

我是一名新程序员,这将是我的第一个项目之一。我使用Moby Grady的同义词库文本文件作为我的同义词库列表,但我遇到了问题。

Moby同义词库的格式是这样的,有一个根词,后跟一个逗号,后跟相似或相关的单词,而不是一个马车提要/换行符,而不是另一个根词......

离。 根词,像单词,像单词,像单词

我用来查找同义词的技术如下所示: 1.输入要查找的单词 2.从第一行开始,将行转换为String数组,然后测试以查看wordToFind是否为 在该行中,如果是,则打印该行并为wordToFind搜索更多行。

我成功打印出了包含我的wordToFind的每一行,但这行中的每一个单词都不是同义词的良好匹配。我要求任何有这种经验的人帮我想出一个方法来获得更类似于我的话语ToTind的方法。

import java.io.BufferedReader;
import java.io.Console;
import java.io.File;
import java.io.FileReader;
import java.util.Arrays;
import java.util.Scanner;

public class Thesaurus {
    File godFile = new File("C:\\Users\\Joe\\Documents\\moby.txt");
    Console console = System.console();
    String inputWord;
    Scanner reader;

    void bigBang() {
        try (Scanner inputScanner = new Scanner(new BufferedReader(
                new FileReader(godFile)))) {

            Scanner reader = new Scanner(System.in);
            System.out.print("Synonyms for word: ");
            String theWord = reader.next();

            one: while (inputScanner.hasNextLine()) {
                String line = inputScanner.nextLine();
                String[] splitLine = line.split(",");
                for (String word : splitLine) {
                    if (word.equalsIgnoreCase(theWord)) {
                        System.out.println("Word Found!");
                        System.out.println("Synonyms for " + theWord + ":");
                        System.out.print((Arrays.toString(splitLine)));

                    }
                }

            }

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

1 个答案:

答案 0 :(得分:0)

这是一个更复杂的NLP问题,它需要的不仅仅是阅读文本文件,但我们将使用您拥有的内容。我首先建议您查看WordNet哪些可以在线使用,或者作为下载,您可以在每个单词中理解这个词。

所以从上面的代码中可以看出你正在处理根词和"就像单词"以类似的方式。因此,如果您搜索的单词首先列为另一个单词的同义词,则会在该行停止。我建议你将根词的概念与同义词分开。

您可以在运行时执行的操作是将整个文件读入HashMap<String, List<String>>。关键是根词,列表是根词的同义词列表。无论如何,这是手动词库的工作方式,您查找根词并为其提供同义词。扫描所有条目以查看它是否包含您要查找的术语是不切实际的。

完成此一次性地图创建后,您可以对HashMap进行简单查找以查找用户感兴趣的术语。

我看到您引用的网站是基于图表的表示,这当然是个好主意。它很受基于本体的问题的欢迎。此图表表示允许您跟踪链接,因为您可能更倾向于这样做,以便您可以找到同义词的同义词等等。