我有一句话发挥其制止已成为普拉伊后。现在我想要再玩。可能吗?我用过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. 是否有可能链接:不()然后:最后一个孩子?
- 5. 我的ID已被更改,我怎么能阻止它?
- 6. Android - 是否有可能阻止背景变得更小,但允许它调整自己的大小?
- 7. 是否有可能阻止触摸添加到队列中?
- 8. 是否有可能阻止引导CSS加载到Reactjs页面?
- 9. 是否有可能阻止这种第一次机会异常
- 10. 是否有可能得到一个默认的令牌,它不会覆盖ANTLR3中已经存在的令牌?
- 11. 是否有可能得到一个分页结果的子集?
- 12. 是否有可能得到一个iOS的代码(SWIFT)
- 13. 已经被阻止添加到网站
- 14. YouTube API:API表示它是可嵌入的并且没有被阻止,但是当它被嵌入时它会被阻止
- 15. 是否有可能阻止Visual Studio打破BackgroudWorker.DoWork中的异常
- 16. semop - 是否有可能增加信号量(在一组两个),而第二个信号被阻止
- 17. 从grep -l得到一个长列表 - 是否有可能?
- 18. 在Java中,是否有可能知道某个类是否已被加载?
- 19. 是否有可能得到使用JNLP
- 20. 是否有可能得到JavaScript截图?
- 21. 可能有一次阻止actionlistener发射?
- 22. 是否有可能检查IE是否阻止我的下载与jQuery/JavaScript?
- 23. 可能阻止init被调用?
- 24. 是否有可能在TextWrangler中阻止评论Python代码
- 25. 是否有可能阻止VS2010杀死WebDev.WebServer进程?
- 26. SharpPcap是否有可能阻止或限制数据包?
- 27. 是否有可能阻止zend引擎释放资源?
- 28. 是否有可能阻止意图继续(“吃”意图)?
- 29. 是否有可能阻止TO fileld在MFMailComposeViewController中编辑
- 30. 是否有可能阻止MassTransit运行时服务需要DTC?
感谢您的回答。我在哪里可以得到这样一本字典。我正在用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