小编use*_*193的帖子

NLTK令牌化 - 更快的方式?

我有一个方法,它接受一个String参数,并使用NLTK将字符串分解为句子,然后分成单词.然后,它将每个单词转换为小写,最后创建每个单词频率的字典.

import nltk
from collections import Counter

def freq(string):
    f = Counter()
    sentence_list = nltk.tokenize.sent_tokenize(string)
    for sentence in sentence_list:
        words = nltk.word_tokenize(sentence)
        words = [word.lower() for word in words]
        for word in words:
            f[word] += 1
    return f
Run Code Online (Sandbox Code Playgroud)

我应该进一步优化上面的代码,以加快预处理时间,并且不确定如何这样做.返回值显然应该与上面的完全相同,所以我希望使用nltk虽然没有明确要求这样做.

有什么方法可以加快上面的代码?谢谢.

python frequency tokenize time-complexity nltk

14
推荐指数
2
解决办法
1万
查看次数

以元组为键的defaultdict,未找到如何在事件键中设置默认值

假设我有defaultdict以下形式:

theta = defaultdict(float)
Run Code Online (Sandbox Code Playgroud)

键由字符串元组 ie 组成(label, word),相关值是给定单词适合给定标签(词性标注)的概率。

例如,“stand”这个词可以是名词或动词。所以我可以做这样的事情:

theta[('NOUN', 'stand')] = 0.4
theta[('VERB', 'stand')] = 0.6
theta[('ADJ', 'stand')] = 0.0
Run Code Online (Sandbox Code Playgroud)

对于语音标签的其余部分,依此类推。

我需要做的是让字典在默认情况下返回 1 的值,如果它是用它不包含的单词调用的,并且关联的标签是“NOUN”,并为所有其他关联的标签返回 0。例如:

value = theta[('NOUN', 'wordthatdoesntexist')]  # this should be 1
value = theta[('VERB', 'wordthatdoesntexist')]  # this should be 0
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?我可以在初始化步骤中使用 lambda 来完成吗?或者有其他方法吗?

python dictionary tuples defaultdict

1
推荐指数
1
解决办法
1689
查看次数