1

テキスト ファイルに重複する単語が含まれているかどうかを確認するプログラムを Python で作成しようとしています。(そして、存在するかどうかにかかわらず、ブール値を返します)

たとえば、「copy」という名前のテキスト ファイルがあります。そのテキスト ファイルには 1 行の文があります。「コピーはありません」(文中に 2 つある)

別のファイル「nocopy」では、「コピーはありません」という 1 行になります。(そこに1つだけ)

これまでのところ、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 ループですが、必要ないと思います。助けていただければ幸いです。ありがとう!

4

4 に答える 4

3

ファイルのどこかに重複する単語があるどうかを確認したい場合は、次のようにします。

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

これは、すべての単語 (つまり、すべての一意の単語) のセットの数が単語の数と等しいかどうかを確認します。

于 2013-03-04T01:14:17.243 に答える
1

私はあなたがこれを望んでいると思います:

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"

複製が true を返す場合、yes と出力されます。

于 2013-03-04T01:13:56.013 に答える
0
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)を取り除くために使用するだけです)。ただし、重複は同じ単語として定義され、大文字と小文字は区別されません。

于 2013-03-04T02:32:42.230 に答える
0

隣り合って繰り返される単語を探していると思います。たとえば、「There is a pretty house over there.」の「there」を削除したくないでしょう。非常に簡単なオプションは、行をリストに分割してから、連続する要素を比較して重複を削除することです。次に、リストを繰り返し処理し、それに応じて各値をスペースで出力します。サイズだけに興味がある場合は、いつでも単語のリストを単語のセットに変換してから、それらのサイズが同じかどうかを確認できます。

于 2013-03-04T01:03:55.260 に答える