[英]Sentence annotation in text without punctuation
我很難讓 CoreNLP 系統在詩歌語料庫中正確找到一個句子的結尾和另一個句子的開頭。
掙扎的原因:
這是一個特別棘手的問題(系統認為第一句以第二節開頭的“.”結尾)
鑒於缺少大寫字母和標點符號,我想我會嘗試使用-tokenizeNLs來查看是否有所改進,但它太過分了,並切斷了在空白行之間運行的任何句子(有幾個)
這些句子通常在一行的末尾結束,但並非總是如此,所以如果系統可以將行結尾視為句子中斷的潛在候選者,並且可能權衡這些是端點的可能性,那將是明智之舉,但我不知道我將如何實施。
有沒有一種優雅的方法來做到這一點? 或者替代方案?
提前致謝!
(這里的預期句子輸出)
這將是一個整潔的項目! 我認為目前我們小組中沒有人正在研究它,但我認為如果你制作一個補丁,我們沒有理由不加入補丁。 我看到的最大挑戰是我們的句子分割器目前完全基於規則,因此這些“軟”決策相對難以合並。
您的案例的可能解決方案可能是使用語言模型“句末”概率(三個選項,無特定順序: https : //kheafield.com/code/kenlm/,https : //code.google.com/ p / berkeleylm / , http://www.speech.sri.com/projects/srilm/ )。 然后,具有足夠高的句子結束概率的行結束可以被拆分為新句子。
我建立了一個句子分段器,它可以很好地處理未經中斷或部分間斷的文本。 您可以在https://github.com/bedapudi6788/deepsegment找到它。
該模型基於命名實體識別可用於句子邊界(即:句子的開頭或句子的結尾)的想法。 我利用來自tatoeba的數據生成訓練數據,並訓練了BiLSTM + CRF模型,其中包括手套嵌入和角色級別。
雖然這是用Python構建的,但您可以使用flask設置一個簡單的rest api,並將其與Java代碼一起使用。
我推薦NNSPLIT用於 NLP 任務,包括句子邊界檢測,因為它簡單、快速且易於使用。 您還可以在此鏈接中查看以下案例的指標。
pip 安裝 nnsplit
from nnsplit import NNSplit
splitter = NNSplit.load("en")
# returns `Split` objects
splits = splitter.split(["This is a test This is another test"])[0]
# a `Split` can be iterated over to yield smaller splits or stringified with `str(...)`.
for sentence in splits:
print(sentence)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.