2014-04-07 22 views
0

我創建一個視覺詞庫將作爲這裏所示的淡化版本: https://www.visualthesaurus.com/在Java中獲取Moby Grady詞典的同義詞的最佳方法是什麼?

我是一個新的程序員,這將是我的第一個項目。我使用Moby Grady的敘詞表文本文件作爲我的同義詞列表,但我遇到了問題。

莫比詞庫格式,因此有一個根字,然後是逗號,隨後像或與之相關詞語,比滑架進料/換行符和比另一根字...

離。 根詞,如Word,如Word,如Word

我使用發現此刻的同義詞的技術是這樣的: 1.輸入字的找 2.開始在一條線,轉線轉換爲字符串數組,然後測試以查看該行中的wordToFind是否爲 ,如果是,則打印該行並搜索wordToFind的更多行。

我成功地打印出每行包含我的wordToFind的行,但行中的每個單詞對於同義詞都不是很好匹配。我要求任何具有這種經驗的人幫助我想出一種方法讓詞語更加類似於我的wordsToFind。

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(); 
     } 
    } 
} 

回答

0

這是一個更復雜的NLP問題,它需要的不僅僅是閱讀文本文件,而是我們將與您的工作。我會首先建議您查看WordNet,您可以在線使用或下載,您可以從中獲取每個單詞的詞義。

因此,從上面的代碼看來,您正在以類似的方式處理根詞和「喜歡的詞」。因此,如果您搜索的單詞首先被列爲另一個單詞的同義詞,則停在該行。我建議你將根詞的概念與同義詞分開。

您可以在運行時執行的操作是將整個文件讀入HashMap<String, List<String>>。關鍵是根詞,列表是根詞的同義詞列表。無論如何,手工敘詞表的工作方式就是這樣,您會查找根詞併爲您提供同義詞。掃描所有條目以查看它是否包含您正在查找的術語是不實際的。

一旦這一次地圖創作已經完成,你就可以做一個簡單的查找到HashMap中用於該項的用戶感興趣的內容。

我看到你引用的網站做一個基於圖形表示這當然是一個好主意。它在許多基於本體的問題中頗受歡迎。這種圖形表示允許您跟蹤鏈接,因爲您可能更傾向於這樣做,以便您可以找到同義詞的同義詞等,等等。

相關問題