2015-01-13 3 views
-2

나는 텍스트를 생성하기 위해 찾고있었습니다.Markov-Text 생성

지금까지 학습 한 내용은 단어 수준의 Markov-text 생성을 사용해야한다는 것입니다. 나는이 사이트에있는 사람들의 몇 가지 예를 발견했다. here

이제는 제대로 작동하지 않는다는 것을 알았으므로 어쨌든 시도해보고 처리에 복사했습니다. 올바른 라이브러리를 찾지 못하는 오류.

처리가 완료된 텍스트 생성을 수행하는 방법에 대해 더 자세히 알아 보려는 사람이 있습니까? 또는 협업을 원하는 사람조차도. 오픈 소스 란 무엇인가.

내가 원하는 것은 글자 수는 단어 기반이어야하고 데이터베이스는 내가 입력 한 단어로 제공된다는 점을 제외하면 사이트의 예와 많이 다르지 않습니다. 마지막 부분은 내가 여전히 브레인 스토밍을하고있는 다른 소스로 변경 될 수 있습니다. 그러나 실제로 모든 단어가 될 수 있습니다. 아이디어가 있으시면 언제든지 기고 해주십시오.

다른 포럼에서 더 많이 알게되면이 게시물을 편집하겠습니다. 그래서 해결책이있을 때 그것을 다른 사람들에게 전할 수 있습니다.

편집 : 해결 방법은 발전기에 사용할 텍스트를 다음

// required imports for Processing 
import java.util.Hashtable; 
import java.util.Vector; 


String inputFile = "Sonnet51.txt"; 
Markov markovChain1; 
String sentence = ""; 

void setup() { 
    size (900, 500); 
    background(0); 

    markovChain1 = new Markov(); 

    // load text 
    String[] input = loadStrings(inputFile); 
    for (String line : input) { 
    markovChain1.addWords(line); 
    println(line); 
    } 

    // generate a sentence! 
    sentence = markovChain1.generateSentence(); 

    println("-------------"); 
} 


void draw() { 
    background(0); 
    // noLoop(); 
    fill(255); 
    text(sentence, 19, 190); 

    fill(2, 255, 2); 
    text("Please press mouse", 19, height-33); 
} 

void mousePressed() { 
    // generate a sentence! 
    sentence = markovChain1.generateSentence(); 
    println(sentence); 
} 

// ========================================== 

class Markov { 
    Hashtable<String, Vector<String>> markovChain = 
     new Hashtable<String, Vector<String>>(); 

    Markov() { 
    markovChain.put("_start", new Vector<String>()); 
    markovChain.put("_end", new Vector<String>()); 
    } 

    void addWords(String line) { 
    String[] words = line.split(" "); 

    for (int i=0; i<words.length; i++) { 

     if (i == 0) { 
     Vector<String> startWords = markovChain.get("_start"); 
     startWords.add(words[i]); 
     Vector<String> suffix = markovChain.get(words[i]); 
     if (suffix == null) { 
      suffix = new Vector<String>(); 
      suffix.add(words[i+1]); 
      markovChain.put(words[i], suffix); 
     } 
     } 
     else if (i == words.length-1) { 
     Vector<String> endWords = markovChain.get("_end"); 
     endWords.add(words[i]); 
     } 
     else { 
     Vector<String> suffix = markovChain.get(words[i]); 
     if (suffix == null) { 
      suffix = new Vector<String>(); 
      suffix.add(words[i+1]); 
      markovChain.put(words[i], suffix); 
     } 
     else { 
      suffix.add(words[i+1]); 
      markovChain.put(words[i], suffix); 
     } 
     } 
    } 
    } 

    String generateSentence() { 
    String newPhrase = ""; 
    String nextWord = ""; 
    Vector<String> startWords = markovChain.get("_start"); 
    int startWordsLen = startWords.size(); 
    nextWord = startWords.get(int(random(startWordsLen))); 
    newPhrase += " " + nextWord; 
    while (nextWord.charAt (nextWord.length()-1) != '.') { 
     Vector<String> wordSelection=null; 
     wordSelection = markovChain.get(nextWord); 
     if (wordSelection!=null) { 
     int wordSelectionLen = wordSelection.size(); 
     nextWord = wordSelection.get(int(random(wordSelectionLen-1))); 
     newPhrase += " " + nextWord; 
     } 
     else 
     { 
     return newPhrase.toString(); 
     } 
    } 
    return newPhrase.toString(); 
    } 
} // class 
// 

사용을 생성 CLICKBASED.

Thus can my love excuse the slow offence 
Of my dull bearer when from thee I speed 
From where thou art why should I haste me thence 
Till I return of posting is no need 
O! what excuse will my poor beast then find 
When swift extremity can seem but slow 
Then should I spur though mounted on the wind. 
In winged speed no motion shall I know. 
Then can no horse with my desire keep pace. 
Therefore desire of perfectst love being made. 
Shall neigh no dull flesh in his fiery race; 
But love for love thus shall excuse my jade. 
Since from thee going, he went wilful-slow 
Towards thee Ill run, and give him leave to go. 

이제 완전히 작동하고 더 큰 텍스트를 만들기 위해 변경할 수 있습니다. 나는 아무도 아이디어를 내게 알려주지 않았다. 하지만이 사건은 나를 위해 해결되었습니다. Processing 포럼의 ChrisIr에게 감사드립니다.

+1

일부 코드를 표시하십시오. 구체적인 문제를 설명하십시오. – DrKoch

+0

코드는 정렬 된 단어 목록을 생성하고 이진 검색을 수행합니다. 빈도/가중치/계수가 없으므로 마르코프 프로세스는 거의 없습니다. 오, 그는 여러 단어를 하나의 "단어"로 저장하는 것처럼 보입니다. 왝. – joop

+0

나는 코드를 작성하지 않았다. 내 질문은 어디에서 처리 할 코드를 생성하는 markov 기반 텍스트와 같은 것을 찾을 수 있는가이다. 위의 사람이 코드를 요청 했으므로 찾은 자료에서 코드를 제공하고 있습니다. 다른 리소스를 제공하거나 분석을 다른 사람에게 유용하게 사용하면 도움이됩니다. 나를. 그렇지 않으면 나는 정말로 당신의 코멘트를 위해 무엇을 가리키는 지 전혀 보지 못한다. 내가 틀렸다는 것을 설명해주십시오. – Blckpstv

답변

0

내가 사용하는 코드는 상황이 더욱 복잡해지고 있다고 생각합니다. 이 Java example은 훨씬 명확하고 처리 중 "즉시"작업해야합니다 - 그냥 복사/붙여 넣기!

다음은 처리가 필요한 버전입니다.하지만 약간의 조정이 필요할 수도 있습니다.

// required imports for Processing 
import java.util.Hashtable; 
import java.util.Vector; 


String inputFile = "Sonnet51.txt"; 
Markov markovChain; 


void setup() { 
    markovChain = new Markov(); 

    // load text 
    String[] input = loadStrings(inputFile); 
    for (String line : input) { 
    markovChain.addWords(line); 
    } 

    // generate a sentence! 
    String sentence = markovChain.generateSentence(); 
    println(sentence); 
} 


class Markov { 
    Hashtable<String, Vector<String>> markovChain = new Hashtable<String, Vector<String>>(); 

    Markov() { 
    markovChain.put("_start", new Vector<String>()); 
    markovChain.put("_end", new Vector<String>()); 
    } 

    void addWords(String line) { 
    String[] words = line.split(" "); 
    for (int i=0; i<words.length; i++) { 
     if (i == 0) { 
     Vector<String> startWords = markovChain.get("_start"); 
     startWords.add(words[i]); 
     Vector<String> suffix = markovChain.get(words[i]); 
     if (suffix == null) { 
      suffix = new Vector<String>(); 
      suffix.add(words[i+1]); 
      markovChain.put(words[i], suffix); 
     } 
     } else if (i == words.length-1) { 
     Vector<String> endWords = markovChain.get("_end"); 
     endWords.add(words[i]); 
     } else { 
     Vector<String> suffix = markovChain.get(words[i]); 
     if (suffix == null) { 
      suffix = new Vector<String>(); 
      suffix.add(words[i+1]); 
      markovChain.put(words[i], suffix); 
     } else { 
      suffix.add(words[i+1]); 
      markovChain.put(words[i], suffix); 
     } 
     } 
    } 
    } 

    String generateSentence() { 
    String newPhrase= ""; 
    String nextWord = ""; 
    Vector<String> startWords = markovChain.get("_start"); 
    int startWordsLen = startWords.size(); 
    nextWord = startWords.get(int(random(startWordsLen))); 
    newPhrase += " " + nextWord; 
    while (nextWord.charAt (nextWord.length()-1) != '.') { 
     Vector<String> wordSelection = markovChain.get(nextWord); 
     int wordSelectionLen = wordSelection.size(); 
     nextWord = wordSelection.get(int(random(wordSelectionLen))); 
     newPhrase += " " + nextWord; 
    } 
    return newPhrase.toString(); 
    } 
} 
+0

public static Hashtable> markovChain = new Hashtable>() 필드 markovChain은 static으로 선언 할 수 없습니다. 정적 필드는 정적 또는 최상위 레벨 유형으로 만 선언 할 수 있습니다. 이 오류를 설명 할 수 있습니까? 처리 중입니다. – Blckpstv

+0

'> '문자의 출처를 모릅니다. 그것들을 제거해야합니다. 그런 다음,'public static '부분을 삭제하고 다른 변수와 마찬가지로'Hashtable'을 선언 할 수 있습니다! – JeffThompson

+1

int Hashtable {String, Vector {String}} markovChain = 새 해시 테이블 {String, Vector {String}}(); 좋아요? 해시 테이블 선언을 유지해야합니까? – Blckpstv