2014-04-07 2 views
0

나는 여기에 표시된 약화 된 버전으로 역할을 시각적 동의어 사전을 만드는거야. 내 시소러스 목록에 Moby Grady의 Thesaurus 텍스트 파일을 사용하고 있지만 문제가 있습니다. 같은 또는 관련 단어 뒤에 쉼표 루트 단어, 캐리지 공급/줄 바꿈보다 다른 루트 단어보다,이 그래서Java에서 Moby Grady Thesaurus의 동의어 만 사용하는 가장 좋은 방법은 무엇입니까? <a href="https://www.visualthesaurus.com/" rel="nofollow">https://www.visualthesaurus.com/</a></p> <p> 내가 새로운 프로그래머있어이 내 첫 프로젝트 중 하나가 될 것입니다 :

모비 유의어 사전은 ...

예를 포맷됩니다. 루트 단어, 단어 나는 순간에 동의어를 찾을 위해 사용하고 기술은 이렇게 가고

같은 단어와 같은 단어, 같은 : 1. 라인 하나 2. 시작을 찾을 단어를 입력 차례로 선 문자열 배열에 넣고 wordToFind가 해당 행에 인지 확인하고, 일치하는 경우 해당 행을 인쇄하고 wordToFind에 대한 더 많은 행을 검색하십시오.

내 wordToFind를 보유하고있는 각 행을 성공적으로 인쇄하고 있지만이 행의 각 단어는 동의어와 일치하지 않습니다. 나는 이런 경험을 가진 사람이 내 말에 더 비슷한 단어를 얻을 수있는 길을 찾도록 도움을 요청하고 있습니다. 알아보십시오.

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에 간단한 조회를 할 수 있습니다. 당신이 참조하는 웹 사이트를 그래프 기반의 표현을한다는 것을 내가 볼

을 확실히 좋은 생각 일 수 있습니다. 그것은 많은 온톨로지 기반 문제들에 대해 꽤 인기가 있습니다. 이 그래프 표현을 사용하면 더 많은 경향이있는 것처럼 링크를 따라 가면서 동의어의 동의어 등을 찾을 수 있습니다.