【问题标题】:Comparing lists with text files将列表与文本文件进行比较
【发布时间】:2018-08-21 22:54:46
【问题描述】:

我有以下列表:t = ['one', 'two', 'three']

我想读取一个文件并为列表中存在的每个单词添加一个点。例如。如果"one""two"存在于“CV.txt”中,则points = 2。如果它们都存在,则points = 3。

import nltk
from nltk import word_tokenize

t = ['one', 'two', 'three']
CV = open("cv.txt","r").read().lower()

points = 0

for words in t:
    if words in CV:
        #print(words)
        words = nltk.word_tokenize(words)
        print(words)
        li = len(words)
        print(li)
        points = li
        print(points)

假设'CV.txt'包含“one”和“two”这两个词,并以词分割(tokenized),则变量“points”应该加2分

但是,此代码返回:

['one']
1
1
['two']
1
1

正如您所看到的,长度只有 1,但应该是 2。我确信有一种更有效的方法可以通过迭代循环或其他方式而不是 len。 对此的任何帮助将不胜感激。

【问题讨论】:

  • 据我所知,您并没有将长度添加到总点数中。你只是让它平等。这可能是问题吗?
  • 长度等于点数。例如,如果存在 6 个单词,则长度应为 6。每个单词 1 分 == 6。

标签: python list file loops nltk


【解决方案1】:

我认为您不需要在循环内进行标记,因此可能更简单的方法如下:

  • 先对txt文件中的单词进行分词
  • 检查每个常用词 在t

最后,分数将是common_words 中的单词数。

import nltk
from nltk import word_tokenize

t = ['one', 'two', 'three']
CV = open("untitled.txt","r").read().lower()

points = 0

words = nltk.word_tokenize(CV)
common_words = [word for word in words if word in t]
points = len(common_words)

注意:如果你想避免重复的话,你需要在上面的代码中设置如下的常用词:

common_words = set(word for word in words if word in t)

【讨论】:

  • 完美。此代码还消除了单词中存在的字符。例如。 “电话”包含“一个”。谢谢!
  • 太棒了! Happy Coding.
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-04-07
  • 1970-01-01
  • 2011-01-06
  • 1970-01-01
  • 2023-01-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多