我希望能够以这种方式一个接一个地获取句子的POS标签:
def __remove_stop_words(self, tokenized_text, stop_words):
sentences_pos = nltk.pos_tag(tokenized_text)
filtered_words = [word for (word, pos) in sentences_pos
if pos not in stop_words and word not in stop_words]
return filtered_words
但是问题是pos_tag()
每个句子大约需要一秒钟。还有另一种选择可用于pos_tag_sents()
批量执行此操作并加快处理速度。但是,如果我能逐句地做这件事,我的生活会更轻松。
有没有办法更快地做到这一点?
对于NLTK
3.1版,里面nltk/tag/__init__.py
,pos_tag
是这样定义的:
from nltk.tag.perceptron import PerceptronTagger
def pos_tag(tokens, tagset=None):
tagger = PerceptronTagger()
return _pos_tag(tokens, tagset, tagger)
因此,每次对pos_tag
first的调用实例化PerceptronTagger
都会花费一些时间,因为它涉及加载pickle文件。_pos_tag
只需调用tagger.tag
whentagset
是None
。因此,您可以通过
一次 加载文件并调用tagger.tag
自己而不是调用来节省一些时间pos_tag
:
from nltk.tag.perceptron import PerceptronTagger
tagger = PerceptronTagger()
def __remove_stop_words(self, tokenized_text, stop_words, tagger=tagger):
sentences_pos = tagger.tag(tokenized_text)
filtered_words = [word for (word, pos) in sentences_pos
if pos not in stop_words and word not in stop_words]
return filtered_words
pos_tag_sents
使用与上述相同的技巧-实例化PerceptronTagger
一次,然后调用_pos_tag
多次。因此,使用上述代码,您将获得与重构和调用相当的性能提升pos_tag_sents
。
另外,如果stop_words
列表很长,则可以通过stop_words
设置以下设置节省一些时间:
stop_words = set(stop_words)
因为检查集合中的成员资格(例如pos not in stop_words
)是一项O(1)
(恒定时间)操作,而检查列表中的成员资格是一项O(n)
操作(即,它需要的时间与列表的长度成比例地增加)。
为了好玩,我决定用红宝石编码伊拉托西筛子。只是为了好玩,因为我知道有一个库函数。而且,我认为它会很快。但我发现它并不是,至少在我的ruby 1.9.3中,我的上网本速度快了好几倍,甚至在c中也没有。为什么会这样呢。 库实现: 我在红宝石: 图书馆非常慢。
在对实际应用程序进行基准测试时,我遇到了一个与Delphi附带的zlib和zip库相关的令人惊讶的性能特性。 我使用Explorer shell ZIP功能压缩了同一个文件,我粗略的秒表计时是8秒,所以上面的32位时间似乎是合理的。 由于上面代码使用的压缩算法是zlib(Delphi的邮政编码只支持store和deflate),所以我的信念是Delphi使用的zlib库才是这个问题的根源。为什么d
我正在维护一个Julia库,其中包含一个函数,用于在长字符串中每80个字符后插入一行新行。 当字符串长度超过100万个字符时,此函数将变得非常慢(秒或更长)。时间的增长似乎不仅仅是线性的,可能是二次的。我不明白为什么。有人能解释一下吗? 这是一些可复制的代码: 似乎这一行是大部分时间花费的地方: 这是否意味着初始化一个新的需要很长时间?这并不能真正解释超线性运行时间。 我知道构建字符串的标准快速方
这与 R- 查看具有任何 NA 的所有列名称有关 我比较了data.frame和data.table版本,发现data.table慢了10倍。这与大多数使用data.table的代码相反,后者确实比data.frame版本快得多。 预先设置: 可能是什么原因?
问题内容: 是因为我们应该加载类(例如),创建实例,然后搜索适当的方法,打包参数,然后仅调用方法?因此,大多数时间都花在了这些操作上,而不是花在对象上的显式方法调用上,对吧? 问题答案: 使用反射时,每次执行时都需要验证您执行的每个步骤。例如,当您调用一个方法时,它需要检查目标是否实际上是该方法的声明者的实例,是否具有正确数量的参数,每个参数是否具有正确的类型,等等。 绝对没有内联或其他性能技巧的
问题内容: 我有一些针对angularjs应用运行的简单的业力/茉莉单元测试。我使用最新版本的Chrome,并在WebStorm IDE中运行测试。 有时测试套件运行非常快(0.24秒) 有时,针对完全相同的代码的完全相同的测试套件运行非常缓慢(120秒) 我尝试了所有常识性修复。我在网上搜寻了一下,以发现我在做什么错。 为什么我的测试运行如此缓慢? 问题答案: 答案很简单。 我正在使用Chrom