这是一个用于查找 token 类型比率的python代码(代码中以下给出的所有定义)。我无法获得正确的值。我怀疑我的逻辑有问题,无法调试我的逻辑。我将不胜感激任何帮助
def type_token_ratio(text):
"""
(list of str) -> float
Precondition: text is non-empty. Each str in text ends with \n and
text contains at least one word.
Return the Type Token Ratio (TTR) for this text. TTR is the number of
different words divided by the total number of words.
>>> text = ['James Fennimore Cooper\n', 'Peter, Paul, and Mary\n',
'James Gosling\n']
>>> type_token_ratio(text)
0.8888888888888888
"""
x = 0
while x < len(text):
text[x] = text[x].replace('\n', '')
x = x + 1
index = 0
counter = 0
number_of_words = 0
words = ' '.join(text)
words = clean_up(words)
words = words.replace(',', '')
lst_of_words = words.split()
for word1 in lst_of_words:
while index < len(lst_of_words):
if word1 == lst_of_words[index]:
counter = counter + 1
index = index + 1
return ((len(lst_of_words) - counter)/len(lst_of_words))
最佳答案
在这里,您可能想要编写什么(从-for-开始替换您的代码)。
init_index=1
for word1 in lst_of_words:
index=init_index
while index < len(lst_of_words):
if word1 == lst_of_words[index]:
counter=counter+1
break
index = index + 1
init_index = init_index + 1
print word1
print counter
r=(float(len(lst_of_words) - counter))/len(lst_of_words)
print '%.2f' % r
return r
=> index = init_index实际上是word1之后的单词的索引;搜索总是从下一个单词重新开始。
=> break:不计入多次相同的事件,一次迭代不计算一次。
您正在搜索列表的其余部分中是否存在与此单词重复的单词(因为之前的迭代已经完成了该单词)
应该注意不要重述多次发生的小腿病,这就是为什么要休息的原因。如果同一单词有多个出现,则将在进一步的迭代中找到下一个出现。
不是防弹的,根据您的代码。