簡體   English   中英

Python:在文件中查找相同的單詞?

[英]Python: Looking for the same word in a file?

我正在嘗試用Python創建一個程序來檢查文本文件中是否有重復的單詞。 (反過來,如果有或沒有,則返回一個布爾值)

例如,我有一個名為“copy”的文本文件。 在該文本文件中是一行句子。 “那里沒有副本”(句子中有兩個)

在另一個文件“nocopy”中,它將是一行,“沒有副本”。 (那里只有一個)

到目前為止,我已經構建了我的Python程序:

def duplicate(fname):
 '(file.txt) ==> (Boolean) Returns True if there are duplicate words'
 infile = open(fname, 'r')
 l = infile.read()
 infile.close
 #Missing code here

我無法弄清楚接下來該做什么。 我的想法是嵌套for循環,但我認為我不需要它。 非常感謝幫助。 謝謝!

如果你想查看文件中是否有任何重復的單詞,那么我會這樣做:

def duplicates(fname):
    with open(fname) as f:
        words = f.read().split()
    return len(set(words)) != len(words)

這將檢查所有單詞的集合的數量(即,每個唯一單詞)是否等於有多少單詞。

我想你想要這個:

def duplicate(fname):
    infile = open(fname, 'r')
    for line in infile.readlines():
        for a in line.split(' '):
                line=line.replace(a,"",1)
                if a in line:
                        return True

如果你想嘗試一下:

def duplicate(fname):
    infile = open(fname, 'r')
    for line in infile.readlines():
                for a in line.split(' '):
                        line=line.replace(a,"",1)
                        if a in line:
                                return True






if(duplicate('fname.txt')):
        print "yes"

如果duplicate返回true,則會打印yes。

我假設您正在尋找彼此相鄰的重復單詞。 例如,你不想消除“那里有漂亮的房子”中的“那里”。 非常簡單的選擇是將行拆分為列表,然后比較連續元素,刪除副本。 然后,這將是迭代列表並相應地用空格打印每個值的問題。 如果您只對大小感興趣,可以隨時將單詞列表轉換為一組單詞,然后檢查它們的大小是否仍然相同。

def duplicate(fname):
    '(file.txt) ==> (Boolean) Returns True if there are duplicate words'
    infile = open(fname, 'r')
    fLines = []
    for line in infile:
        l = line.split(' ')
        fLines += [i.lower().rstrip('\n') for i in l]
    infile.close()
    nLines = list(set(fLines))
    for l in nLines:
        if fLines.count(l) > 1: return True
    return False

我建議使用一個集合,因為它刪除了重復項,因此它限制了所需的迭代量。 請注意,這不會考慮標點符號(只需使用s.strip(punctuation)來擺脫它)。 但是,重復項被定義為相同的單詞,而不區分大小寫。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM