我有一句話發揮其制止已成爲普拉伊後。現在我想要再玩。可能嗎?我用過Porter的Stemmer。它是否有可能得到一個自然的詞後,已被阻止?
回答
Stemmer能夠處理人工不存在的單詞。你是否願意將它們作爲一組所有可能單詞的元素返回?你怎麼知道這個詞不存在,不應該被退回?
作爲選項:查找所有單詞及其形式的詞典。爲他們每個人找一個幹。將此投影保存爲地圖:(詞幹,所有單詞形式的列表)。所以你可以得到一個給定詞幹的所有單詞形式的列表。
UPD: 如果你需要的所有可能的話,包括不存在的話,我可以提供這樣的算法(它不檢查,只是一個建議):
Porter stemming algorithm。我們需要一個顛倒的版本。
如果直接算法中的規則有一個形式(m>1) E ->
(刪除最後一個E),那麼反向規則就是「fork with E」,這意味着我們需要嘗試其他方法。例如,在直接算法probate -> probat
中,反過來,我們有兩個備選方案:probat -> { probat, probate }
。這些替代方案應分別進一步處理。請注意,這是一個設置的替代品,所以我們將只處理不同的單詞。這樣的規則將具有以下形式:A -> { , B, C }
,這意味着「用三種替代方式取代結尾A:保持原樣,用B和C」。
Step 5b: (m>1) *L -> { , +L } // Add L if there's L at the end.
Step 5a: (m>1) -> { , +E }
(m=1 and not *o) -> { , +E } // *o is a special condition, it's not *O.
Step 4: (m>1) *S or *T -> { , +ION }
(m>1) -> { , +AL, +ANCE, +ENCE, ..., +IVE, +IZE }
Step 3: (m>0) *AL -> { , +IZE }
(m>0) *IC -> { , +ATE, +ITI, +AL }
(m>0) -> { , +ATIVE, +FUL, +NESS }
Step 2: (m>0) *ATE -> { , ATIONAL } // Replace ATE.
(m>0) *TION -> { , +AL } // Add AL at the end.
(m>0) *ENCE -> { , ENCI } // Replace ENCE.
...
(m>0) *BLE -> { , BILITI } // Replace BLE.
Step 1c: (*v*) *I -> { , Y } // Replace I.
Step 1b: (m=1 and *oE) -> { , +D, delete last E and add ING } // *o is a special condition.
(*v*c and not (*L or *S or *Z)) -> { , add last consonant +ED, add last consonant + ING }
*IZE -> { , IZING, +D }
(*v*BLE) -> { , +D, delete last E and add ING }
*ATE -> { , ATING, +D }
(*v*) -> { , +ED, +ING }
(m>0) *EE -> { , +D }
Step 1a: *I -> { , +ES }
*SS -> { , +ES }
not *S -> { , +S }
直線算法不得不選擇第一長的規則。顛倒的算法應該使用所有的規則。
例(直):
Input: PLAYING
Step 1a doesn't match.
PLAYING -> PLAY (Step 1b)
PLAY -> PLAI (Step 1c)
m=0, so the steps 2-5 don't match.
Result: PLAI
反轉:
Input: PLAI
m=0, so the steps 2-5 are skipped
Step 1c:
PLAI -> { PLAI, PLAY }
Step 1b:
PLAI -> { PLAI, PLAIED, PLAIING }
PLAY -> { PLAY, PLAYED, PLAYING }
Resulting set: { PLAI, PLAIED, PLAIING, PLAY, PLAYED, PLAYING }
Step 1a:
PLAI -> { PLAI, PLAIS, PLAIES }
PLAIED -> { PLAIED, PLAIEDS }
PLAIING -> { PLAIING, PLAIINGS }
PLAY -> { PLAY, PLAYS }
PLAYED -> { PLAYED, PLAYEDS }
PLAYING -> { PLAYING, PLAYINGS }
Resulting set: { PLAI, PLAIS, PLAIES, PLAIED, PLAIEDS, PLAIING, PLAIINGS, PLAY, PLAYS, PLAYED, PLAYEDS, PLAYING, PLAYINGS }
我已經檢查了所有這些話在Michael Tontchev的鏈接。每個人的結果都是「plai」(請注意,該網站不接受大寫輸入)。
顯然不是。許多不同的單詞在被阻止之後可以變成plai:包括玩耍和玩耍。
嘗試在這裏:http://9ol.es/porter_js_demo.html
所以,如果給定普拉伊,它可能來自任何字,這是不確定的。或者你想獲得所有可能的單詞集合嗎?
更新: Qualtagh提到了一些好主意。
是否有可能得到一組可能的單詞來plai? – 2015-02-11 04:31:15
- 1. 是否有可能阻止您的MainActivity被終止?
- 2. 是否有可能得到一個大整數實例的自然日誌?
- 3. 是否有可能阻止一個抽象類的繼承
- 4. 是否有可能阻止構建鏈在TeamCity中被中斷?
- 5. 是否有可能在被調用時阻止垃圾收集?
- 6. 是否有可能鏈接:不()然後:最後一個孩子?
- 7. API自動化 - 是否有可能得到回覆後調用
- 8. 我的ID已被更改,我怎麼能阻止它?
- 9. Android - 是否有可能阻止背景變得更小,但允許它調整自己的大小?
- 10. 是否有可能阻止引導CSS加載到Reactjs頁面?
- 11. 是否有可能阻止觸摸添加到隊列中?
- 12. 是否有可能阻止這種第一次機會異常
- 13. 如果你知道它是ID,是否有可能得到一個標記?
- 14. 是否有可能阻止某個線程運行?
- 15. 是否有可能有一個CASE當一個然後選擇WHERE子句
- 16. 是否有可能阻止git立即刪除已刪除分支的reflog?
- 17. Node.js阻止自然
- 18. 是否可以確定是否從SecureStream讀取將被阻止?
- 19. 是否有可能得到一個分頁結果的子集?
- 20. 是否有可能得到一個iOS的代碼(SWIFT)
- 21. 是否有可能得到一個默認的令牌,它不會覆蓋ANTLR3中已經存在的令牌?
- 22. 是否有可能得到的Android
- 23. 是否有可能獲得一行被刪除的SQL查詢?
- 24. 已經被阻止添加到網站
- 25. document.location/parent.location - 它們可以被阻止嗎?
- 26. 是否有可能得到一個網頁後JS的原始文本在python
- 27. 是否有可能阻止perforce提交沒有文件名?
- 28. 是否可以阻止來自現有DLL的消息框?
- 29. 是否有可能阻止節點JS中的父線程?
- 30. 是否有可能阻止Visual Studio打破BackgroudWorker.DoWork中的異常
感謝您的回答。我在哪裏可以得到這樣一本字典。我正在用PHP編碼 – 2015-02-11 05:59:47
@ eddard.stark,看看[here](http:// stackoverflow。com/questions/741003/a-text-file-with-a-list-of-words)或[here](http://stackoverflow.com/questions/2213607/how-to-get-english-language-word -數據庫)。你只需要一個大的文本文件,該文件將被處理一次以獲得用於將它們存儲在任何本地數據庫(或者像Patricia樹或DAWG的數據結構)中的'(詞幹,單詞列表)對。 – Qualtagh 2015-02-11 07:06:34
非常感謝你 – 2015-02-11 07:34:06