python - 如何拆分没有空格的文本为单词列表?将组合单词拆分开
很多时候,我们需要把一长串单词字符拆分开来,比如:
输入:“tableapplechairtablecupboard …”很多字。我们希望有一个有效的算法来分割这样的文本到单词列表,并得到:
输出:[“table”,“apple”,“chair”,“table”,“cup”,“board”]
或者将一个很长的函数名拆分成小单词: WbxNewBrowserInstance 变为 [ wbx new browser instance ]
1算法的思想
算法的思想是:通过所有可能的单词(从第一个字母开始),并找到最长的单词可能 ,插入空格。
所以我们需要一个 “常用单词列表”。
后面的方法是对输出的分布进行建模。良好的第一近似是假设所有单词是独立分布的。然后你只需要知道所有单词的相对频率。可以合理地假定它们遵循Zipf定律,即在单词列表中具有秩n的单词具有大约1 /(n log N)的概率,其中N是字典中的单词数。
一旦你修正了模型,你可以使用动态规划来推断空格的位置。最可能的句子是最大化每个单词的概率的乘积,并且很容易用动态规划来计算它。不是直接使用概率,而是使用定义为概率的倒数的对数的成本来避免溢出。
2代码
def cutLongNameFun(self,s):
''' longWords变为 long word:log里面有很多长函数名,比如WbxMeeting_VerifyMeetingIsExist。 将其拆成小单词wbx meeting verify m