2

ファイルを文字列として受け取り、ファイルに重複する単語がある場合は True を返し、そうでない場合は False を返す関数を作成したいと考えています。

これまでのところ、私は持っています:

def double(filename):
    infile = open(filename, 'r')
    res = False
    l = infile.split()
    infile.close()

    for line in l:
        #if line is in l twice
        res = True
    return res

私のファイルに次のものが含まれている場合:「同じ単語があります」

True を取得する必要があります

私のファイルに次のものが含まれている場合:「同じ単語はありません」

私はFalseを取得する必要があります

文字列に単語の重複があるかどうかを判断する方法

PS 重複する単語は他の単語の直後に来る必要はありません。つまり、「there」も重複しているため、「there is a same word in the statement over there」は True を返す必要があります。

4

5 に答える 5

4

str.split ()メソッドは、アポストロフィと句読点があるため、自然な英語のテキストで単語を分割する場合にはうまく機能しません。通常、これには正規表現の力が必要です。

>>> text = """I ain't gonna say ain't, because it isn't
in the dictionary. But my dictionary has it anyways."""

>>> text.lower().split()
['i', "ain't", 'gonna', 'say', "ain't,", 'because', 'it', "isn't", 'in', 'the',
 'dictionary.', 'but', 'my', 'dictionary', 'has', 'it', 'anyways.']

>>> re.findall(r"[a-z']+", text.lower())
['i', "ain't", 'gonna', 'say', "ain't", 'because', 'it', "isn't", 'in', 'the',
 'dictionary', 'but', 'my', 'dictionary', 'has', 'it', 'anyways']

重複する単語があるかどうかを調べるには、集合演算を使用できます。

>>> len(words) != len(set(words))
True

重複する単語を一覧表示するには、 collections.Counterで multiset 操作を使用します。

>>> sorted(Counter(words) - Counter(set(words)))
["ain't", 'dictionary', 'it']
于 2013-06-02T18:05:48.170 に答える
3
def has_duplicates(filename):
    seen = set()
    for line in open(filename):
        for word in line.split():
            if word in seen:
                return True
            seen.add(word)
    return False
于 2013-06-02T17:23:29.837 に答える
0

Another general approach to detecting duplicate words, involving collections.Counter

from itertools import chain
from collections import Counter
with open('test_file.txt') as f:
    x = Counter(chain.from_iterable(line.split() for line in f))
    for (key, value) in x.iteritems():
            if value > 1:
                    print key
于 2013-06-02T17:36:20.617 に答える
0
a = set()
for line in l:
  if (line in a):
    return True
  a.add(line)
return False
于 2013-06-02T17:23:38.797 に答える