Python文档比较返回其他文档中没有的所有单词

2024-04-19 09:48:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试创建一个“翻译比较”程序,它读取并比较两个文档,然后返回一个文档中所有不在另一个文档中的单词。现在,我的程序只返回“file1”中单词的第一个实例,而不返回“file2”中单词的第一个实例。这是一个初学者的类,所以我尽量避免使用晦涩的内部方法,即使这意味着效率较低的代码。这就是我目前所拥有的。。。你知道吗

def translation_comparison():
   import re
   file1 = open("Desktop/file1.txt","r")
   file2 = open("Desktop/file2.txt","r")
   text1 = file1.read()
   text2 = file2.read()
   text1 = re.findall(r'\w+',text1)
   text2 = re.findall(r'\w+',text2)
   for item in text2:
       if item not in text1:
           return item  

Tags: 实例文档程序retxtreadopenitem
3条回答

注意大写的单词。示例“Foo”和“Foo”将被视为两个不同的词,而实际上它们是相同的。代码将此视为不匹配,并将返回

虽然Jason Brooks的答案很完美,但我想你也可以看看这个。这利用了set()的基本特性,不需要循环。你知道吗

def translation_comparison():
    import re
    file1 = open("text1.txt","r")
    file2 = open("text2.txt","r")
    text1 = file1.read()
    text2 = file2.read()
    text1 = set(re.findall(r'\w+',text1))
    text2 = set(re.findall(r'\w+',text2))
    return list(text1.difference(text2))

set().difference()是一种基本方法。所以我想,这可能不是一个“晦涩的内在方法”。你知道吗

你可以这样做:

def translation_comparison():
   import re
   file1 = open("text1.txt","r")
   file2 = open("text2.txt","r")
   text1 = file1.read()
   text2 = file2.read()
   text1 = re.findall(r'\w+',text1)
   text2 = re.findall(r'\w+',text2)
   # added lines below
   text1 = list(set(text1))
   text2 = list(set(text2))
   for word in text2:
    if word in text1:
        text1.remove(word)
   return text1

看看我的评论。我们首先为每个文档中的单词列表设置集合。这就给我们留下了一个唯一的单词列表,以防出现重复的单词。接下来,我们循环遍历第二个文本中的每个单词,如果该单词也存在于第一个文本中,我们将其从第一个文本中的单词列表中删除。最后,我们将只剩下text1中不在text2中的单词。我们在最后返回包含所有这些单词的列表。你知道吗

让我知道这是否有意义,或者如果你有任何问题。你知道吗

编辑:根据@blckknght的建议,一种更简单的方法是使用集减法,如下所示:

def translation_comparison():
   import re
   file1 = open("text1.txt","r")
   file2 = open("text2.txt","r")
   text1 = file1.read()
   text2 = file2.read()
   text1 = re.findall(r'\w+',text1)
   text2 = re.findall(r'\w+',text2)
   return list(set(text1) - set(text2))

还要注意的是,这会将同一个单词的大写方式不同(例如:Thethe)视为单独的单词。尽管这很容易用基本的列表理解来解决:text1 = [x.lower() for x in text1]text2 = [x.lower() for x in text2]。你知道吗

相关问题 更多 >