我有一个小脚本,想要根据几个条件提取一些独特的单词,并检查条件是否超长。
可能是因为它检查了一个大字典,并且它还为每个令牌应用了一个词干分析器。
条件是:
是否有更快的多条件检查实现?任何基于python的解决方案都是可以接受的,即使使用subprocess或cython或调用c / c ++实现也是如此。
请记住,实际上,有更多条件,字典最多可达100,000个条目。我做了类似下面的事情,即使使用yield
,链接多个条件也很慢。
import string
from nltk.stem import PorterStemmer
porter = PorterStemmer()
dictionary = ['apple', 'pear', 'orange', 'water', 'eat', 'the', 'with', 'an', 'pie', 'full', 'of', 'water', 'at', 'lake', 'on', 'wednesday', 'plus', 'and', 'many', 'more', 'word']
text = "PEAR eats the Orange, with an Apple's MX2000 full of water - h20 - at Lake 0129 on wednesday."
def extract(txt, dic):
for i in txt.split():
_i = i.strip().strip(string.punctuation).lower()
if _i not in dic and len(_i) > 1 and not _i.isdigit() \
and porter.stem(_i) not in dictionary and not i.endswith("'s"):
yield _i
for i in extract(text, dictionary):
print i
[OUT]
MX2000
h20
答案 0 :(得分:1)
我头顶的两件事:
set
(如@Alfe建议的那样)。考虑到数据的长度,这肯定会有助于提高速度。