/// <summary> Analyze the text in the single thread. </summary> private void analyzeInSingleThread() { // first phase if (plainTextPluginCnt == 0) { return; } LinkedBlockingQueue <PlainSentence> inQueue1 = null; LinkedBlockingQueue <PlainSentence> outQueue1 = null; PlainSentence ps = null; outQueue1 = queuePhase1[0]; for (int i = 0; i < plainTextPluginCnt; i++) { inQueue1 = outQueue1; outQueue1 = queuePhase1[i + 1]; while ((ps = inQueue1.Poll()) != null) { if ((ps = plainTextProcessors[i].doProcess(ps)) != null) { outQueue1.Add(ps); } while (plainTextProcessors[i].hasRemainingData()) { if ((ps = plainTextProcessors[i].doProcess(null)) != null) { outQueue1.Add(ps); } } if ((ps = plainTextProcessors[i].flush()) != null) { outQueue1.Add(ps); } } } // second phase if (morphAnalyzer == null) { return; } LinkedBlockingQueue <SetOfSentences> inQueue2 = null; LinkedBlockingQueue <SetOfSentences> outQueue2 = null; SetOfSentences sos = null; inQueue1 = outQueue1; outQueue2 = queuePhase2[0]; while ((ps = inQueue1.Poll()) != null) { if ((sos = morphAnalyzer.morphAnalyze(ps)) != null) { outQueue2.Add(sos); } } if (morphemePluginCnt == 0) { return; } for (int i = 0; i < morphemePluginCnt; i++) { inQueue2 = outQueue2; outQueue2 = queuePhase2[i + 1]; while ((sos = inQueue2.Poll()) != null) { if ((sos = morphemeProcessors[i].doProcess(sos)) != null) { outQueue2.Add(sos); } } } // third phase if (posTagger == null) { return; } LinkedBlockingQueue <Sentence> inQueue3 = null; LinkedBlockingQueue <Sentence> outQueue3 = null; Sentence sent = null; inQueue2 = outQueue2; outQueue3 = queuePhase3[0]; while ((sos = inQueue2.Poll()) != null) { if ((sent = posTagger.tagPOS(sos)) != null) { outQueue3.Add(sent); } } if (posPluginCnt == 0) { return; } for (int i = 0; i < posPluginCnt; i++) { inQueue3 = outQueue3; outQueue3 = queuePhase3[i + 1]; while ((sent = inQueue3.Poll()) != null) { if ((sent = posProcessors[i].doProcess(sent)) != null) { outQueue3.Add(sent); } } } }