我怎样才能'正常化'
word = 'yeeeessssssss'
Run Code Online (Sandbox Code Playgroud)
至
word = 'yes'
Run Code Online (Sandbox Code Playgroud)
Kat*_*iel 14
没有更多信息,就无法回答你的问题.正如您所说,您希望从可迭代中删除重复项.你可以这样做itertools.groupby:
>>> "".join(c for c, _ in groupby("yeeessssss"))
'yes'
Run Code Online (Sandbox Code Playgroud)
当然,这将删除所有重复:
>>> dedupe = lambda s: "".join(c for c, _ in groupby(s))
>>> dedupe("hello")
'helo'
>>> dedupe("Mississippi")
'Misisipi'
Run Code Online (Sandbox Code Playgroud)
我认为你的问题可能要困难得多; 即,如何将可能具有重复字母的单词标准化为实际的英语单词.这基本上不可能精确地做 - 什么会成为beeeeeee或feeeed将成为什么? - 但是,经过很多努力,你可以通过各种启发式方法来近似它.
一个简单的方法是查看单词是否在字典中,如果没有,则一次删除一个重复的字母,直到它为止.这将是非常低效的,但可能会奏效.
另一种方法是使用自然语言库将单词转换为某种"正常形式".这可能是它的声音,拼写方式或其他内容.然后,您可以找到与该普通表单最接近的单词,并使用它来表示您的重复数据删除单词.
另一种方法是在字符串之间定义某种"修改距离",其中为每个操作"删除字符","插入字符"和"修改字符"分配固定成本.然后,您可以根据此指标计算与输入最接近的单词.这是一个经过充分研究的问题,因为它被用于生物信息学,并且有一种优雅的动态编程方法.不幸的是,锻炼也很困难(一个相关的问题是我本科学位课程的几周课程).
; TL,博士
只需删除重复项就很容易了.找到最好的近似值作为英语单词是非常难的.
| 归档时间: |
|
| 查看次数: |
2485 次 |
| 最近记录: |