2011-08-14 3 views
1

나는 wordnet에서 synsets를 검색하여 배열로 반환합니다. 이것은 내 코드의 일부입니다bfs로 검색

<pre> 
RiWordnet wordnet = new RiWordnet(); 
String word = lineTF.getText(); 
// Get synsets 
String[] synsets = wordnet.getAllSynsets(word, "n"); 
String outputSynset = "Word: " + word; 

    GUIsynonymTA.append("\n"); 
    GUIsynonymTA.append(outputSynset); 
    GUIsynonymTA.append("\n"); 

    if (synsets != null) 
    { 

    for (int i = 0; i < synsets.length; i++) 
    { 
    GUIsynonymTA.append("\n"); 
    GUIsynonymTA.append("Synsets " + i + ": " + (synsets[i]));       
    GUIsynonymTA.append("\n"); 

    //implement BFS here 
<code> 

이 줄까지, 나는 성공적으로 synsets를 검색했습니다. 내가 할 일은 WordNet synsets 검색에서 Breadth First Search를 구현하는 것입니다. wordnet에 모든 동의어를 저장하는 RiWordnet 라이브러리에서 getAllSynsets 메소드를 호출하고 있습니다. 루핑 (if..else)을 사용해 보았지만 내 검색을 어디에서 멈출 지 모르겠습니다. BFS를 사용하면 검색 동의어가 방문한 노드로 표시되는 검색 범위를 알 수 있습니다. 다음은 동의어 검색에서 BFS를 사용하여 구현하고자하는 개념입니다. 예를 들어

는 :

student = {pupil, educatee, scholar, bookman} 

pupil = {student, educatee, schoolchild} 

educatee = {student, pupil} --> has been search, so go to the next synonym. 

schoolchild = {pupil} --> has been search, so go to the next synonym. 

scholar = {bookman, student, learner, assimilator} 

bookman = {scholar, student} --> has been search, so go to the next synonym. 

learner = {scholar, assimilator, apprentice, prentice} 

assimilator = {learner, scholar} --> has been search, so go to the next synonym. 

apprentice = {learner} --> has been search, so go to the next synonym. 

prentice = {apprentice, learner} --> has been search, so go to the next synonym. 

ALL SYNONYM HAS BEEN SEARCH, SO STOP. 

어떤 사람들은 HashSet의 대신 BFS을 적용하라고 제안했다. 누구든지 나를 도울 수 있습니까?

Queue<String> pending = ... 
HashSet<String> processed = ... 

pending.add("startWord"); 
processed.add("startWord"); 

while (!pending.isEmpty()) { 
    String word = pending.remove(); 

    String[] possibilities = wordnet.getAllSynsets(word, "n"); 
    for (String p : possibilities) { 
    // Make sure we haven't already processed the new word 
    if (!processed.contains(p)) { 
     pending.add(p); 
     processed.contains(p); 
     } 
    } 
} 

// At this point, processed contains all synonyms found 

그것은 (BFS가 무엇인지 기본적으로) 동의어의 재귀 확장 더 많거나 적은 : 당신이 뭔가를 원하는 것처럼

+1

synsets에 비해 BFS가 무슨 뜻입니까? 그것들은 평범한 데이터이고, BFS는 그래프로 찾기위한 골자입니다. – ffriend

+0

다른 [질문] (http://stackoverflow.com/questions/6935916/nested-search-of-synsets-from-wordnet-using-java)에서 아이디어를 얻었으나 BFS에서 무엇을 찾으려고합니까? 동의어의 모든 동의어와 동의어, 동의어의 동의어 등을 열거하려면 재귀를 사용하고 모든 동의어를 HashSet에 넣으면 서클을 피할 수 있습니다. – ffriend

+0

감사합니다. 실제로 BFS는 방문 및 비공개 그래프의 개념을 사용합니다. 나는 검색의 한계를 설정하기 위해 이것을 구현하고 싶다. 동의어가 검색되면 (BFS에서 방문한 것으로 표시됨) 검색이 중지됩니다. 시스템은 검색을 통해 발견 된 모든 동의어를 나열합니다. –

답변

0

는 소리 .. 사전에 감사합니다.

+0

감사합니다 @ 제임스 .. 나는 그것을 시도 fisrt .. =) –