所以我正在構建一個分類管道,此時corenlp lemmatizer似乎是一個相當重要的瓶頸。我試圖弄清楚,我是如何導致經濟下滑,或者如果詞形化一般是緩慢的。最簡單的方法來解釋句子
這裏是我當前的代碼:
def singleStanfordSentenceToLemmas(sentence: String): Seq[String] = {
val doc = new Annotation(sentence)
pipeline.annotate(doc)
val tokens = doc.get(classOf[TokensAnnotation]).toList
tokens.par.foldLeft(Seq[String]())(
(a, b) => {
val lemma = b.get(classOf[LemmaAnnotation])
if (!(stopWords.contains(b.lemma().toLowerCase) || puncWords.contains(b.originalText())))
a :+ lemma.toLowerCase
else a
}
)
}
這裏是一個創建管道的代碼
val props = new Properties()
props.put("annotators", "tokenize, ssplit, pos, lemma")
val pipeline = new StanfordCoreNLP(props)
我目前的理論是
A)的事實,我使用的是茂盛的coreNLP對象承載了大量的開銷,這會降低一切。也許還有一個只會迷惑的最小課堂?
b)事實上,lemmatizer需要ssplit和POS標記似乎相當激烈,因爲我只給它單個句子,有沒有一種更有效的方法來找到單詞的引文?
c)或許corenlp只是很慢,可能有更快的lemmatizer在那裏。
任何幫助將不勝感激!
代碼運行速度有多慢?上面的代碼應該以大約10k句子/秒/ CPU核心運行,除非輸入數據中有些奇怪。如果你需要比這更快的速度,一個詞幹(例如Porter Stemmer)可能會更快。 –