2017-04-03 9 views
3

コードに問題があります。私は "the"のようなファイルで繰り返し単語を見つけようとしていて、それが起こった行を印刷しようとしています。これまでのところ、私のコードは行数のために働いていますが、ファイル全体で繰り返されるすべての単語を私に与えます。それは倍増した言葉だけを数えるために何を変える必要がありますか?ファイル内の単語を二重に見つける方法

my_file = input("Enter file name: ") 
lst = [] 
count = 1 
with open(my_file, "r") as dup: 
for line in dup: 
    linedata = line.split() 
    for word in linedata: 
     if word not in lst: 
      lst.append(word) 
     else: 
      print("Found word: {""} on line {}".format(word, count)) 
      count = count + 1 
dup.close() 
+0

はちょうど= [] '各行の繰り返しで' LSTをリセットします。 –

+0

@ Jean-FrançoisFabreは、隣接するものだけでなく、行内の重複した単語を検出します。 – Maciek

答えて

0

ここで尋ねた質問への唯一の純粋な答え:

「私はそれが唯一の倍の単語を数える変更する必要がありますか?」ここで

あなたは以下のとおりです。

my_file = input("Enter file name: ") 
count = 0 
with open(my_file, "r") as dup: 
for line in dup: 
    count = count + 1 
    linedata = line.split() 
    lastWord = '' 
    for word in linedata: 
     if word == lastWord: 
      print("Found word: {""} on line {}".format(word, count)) 
     lastWord = word 
dup.close() 
1
my_file = input("Enter file name: ") 
with open(my_file, "r") as dup: 
    for line_num, line in enumerate(dup): 
     words_in_line = line.split() 
     duplicates = [word for i, word in enumerate(words_in_line[1:]) if words_in_line[i] == word] 
     # now you have a list of duplicated words in line in duplicates 
     # do whatever you want with it 
+1

enumerateは既に0から始まっているので 'words_in_line [i]'にする必要があります; – swenzel

+0

@swenzelあなたは正しいです、ありがとう!今すぐ修正しました。 – Maciek

0

THISfile.pyという名前のファイルに以下のコードを入れて、あるものを見るためにそれを実行します:

# myFile = input("Enter file name: ") 
# line No 2: line with with double 'with' 
# line No 3: double (word , word) is not a double word 
myFile="THISfile.py" 
lstUniqueWords = [] 
noOfFoundWordDoubles = 0 
totalNoOfWords  = 0 
lineNo    = 0 
lstLineNumbersWithWordDoubles = [] 
with open(myFile, "r") as myFile: 
    for line in myFile: 
     lineNo+=1 # memorize current line number 
     lineWords = line.split() 
     if len(lineWords) > 0: # scan line only if it contains words 
      currWord = lineWords[0] # remember already 'visited' word 
      totalNoOfWords += 1 
      if currWord not in lstUniqueWords: 
       lstUniqueWords.append(currWord) 
       # put 'visited' word word into lstAllWordsINmyFile (if it is not already there) 
      lastWord = currWord # we are done with current, so current becomes last one 
      if len(lineWords) > 1 : # proceed only if line has two or more words 
       for word in lineWords[1:] : # loop over all other words 
        totalNoOfWords += 1 
        currWord = word 
        if currWord not in lstUniqueWords: 
         lstUniqueWords.append(currWord) 
         # put 'visited' word into lstAllWordsINmyFile (if it is not already there) 
        if(currWord == lastWord): # duplicate word found: 
         noOfFoundWordDoubles += 1 
         print("Found double word: ['{""}'] in line {}".format(currWord, lineNo)) 
         lstLineNumbersWithWordDoubles.append(lineNo) 
        lastWord = currWord 
        #  ^--- now after all all work is done, the currWord is considered lastWord 
print(
    "noOfDoubles", noOfFoundWordDoubles, "\n", 
    "totalNoOfWords", totalNoOfWords, "uniqueWords", len(lstUniqueWords), "\n", 
    "linesWithDoubles", lstLineNumbersWithWordDoubles 
) 

出力は次のようになります。

Found double word: ['with'] in line 2 
Found double word: ['word'] in line 19 
Found double word: ['all'] in line 33 
noOfDoubles 3 
totalNoOfWords 221 uniqueWords 111 
linesWithDoubles [2, 19, 33] 

コード内のコメントをチェックして、どのように動作するかを理解することができます。楽しいコーディングています:)

関連する問題