我有一个方法,它接受一个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虽然没有明确要求这样做.
有什么方法可以加快上面的代码?谢谢.
假设我有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 来完成吗?或者有其他方法吗?