2012-11-10 25 views
0

我正在尋找一個微調未知文字一定長度的解決方案。只保留完整的句子。如何將文本修剪爲一定長度的完整句子?

所以這樣

"Were you born 1. 3. 1987 in Prague? Štěpán Jr. lives there for 3 years now! " 

文本應該變成

"Were you born 1. 3. 1987 in Prague? " 

的字符限制50,40(和20 --find-下句結尾)。

我讀過許多SO問題 - 大部分的答案是的

substr($text, 0, strrpos('.', $text) + 1); 

的改變,但是這顯然無法爲上述句子和其他類似。其他人則建議使用Stanford Text Parser或OpenNLP。它們非常酷,但不適用於典型應用。你不會在你的Ruby/PHP服務器上安裝Java,只是爲了修剪文本。所以我正在尋找一些80/20解決方案,這將是語言無關緊要的,並且能夠處理出現的典型案例。

我想不出比這個更有問題的句子(包含日期,非句點末尾和非ascii字符在下一句的開始和非結束點在「限制」中間)句子)。

我還創建了GIST(https://gist.github.com/4051035)供您分叉和玩 - 分叉確保用戶可以點擊此問題的不同解決方案,因此請使用它; )我想提出這個問題comunity-wiki,但它似乎不適用於問題 - 只爲答案。因此,請將任何建議/相關SO問題添加到評論中。謝謝。

回答

1

如果這是足以讓你獲得80%的精度,那麼你可以申請簡單的規則:「?」

  • 每和'!'句子的標記結束
  • 當你找到點檢查,如果下一個字用大寫字母開頭,但還不是全部使用大寫字母(記住它僅適用於80/20法則)

如果你需要更好的東西,然後恐怕你需要nlp庫。如果你有PHP /紅寶石託管,那麼你應該能夠使用NLTK。它是用python編寫的,並得到很大的支持。

0

我解決這將是檢查最後一句分離器(即點空間)的粗略的想法,檢查是否有斑點空間分隔的數字或已知的圍繞該位置的圖案,如果有,懦弱挑上一句子。也許計算下一個非數字點空間位置,如果它處於某個軟限制(比如說$ limit + 10),則選擇當前句子。

相關問題