2015-11-03 2 views
-1
file_str = input("Enter poem: ") 
my_file = open(file_str, "r") 
words = file_str.split(',' or ';') 

У меня есть файл на моем компьютере, который содержит очень длинное стихотворение, и я хочу посмотреть, есть ли какие-либо слова, которые дублируются в каждой строке (следовательно, они разделяются пунктуацией).Как найти повторяющиеся слова в текстовом файле?

У меня это много, и я не хочу использовать модуль или счетчик, я бы предпочел использовать циклы. Есть идеи?

+2

почему бы не использовать счетчик? Счетчик - правильное решение ... –

+2

При кодировании, пожалуйста, не каждый решает, что вы просто «не хотите использовать» фактическое решение. Вы пытаетесь решить проблему, не просто выбросьте решение. –

+0

Вы хотите проверить только по строкам? или целое стихотворение? – GLHF

ответ

-1
def Counter(text): 
    d = {} 
    for word in text.split(): 
     d[word] = d.get(word,0) + 1 
    return d 

есть петли:/

расколоть на punctionation только мы

matches = re.split("[!.?]",my_corpus) 
for match in matches: 
    print Counter(match) 
+1

Как насчет 'collections.Counter'? – TigerhawkT3

+2

lol он явно заявляет, что он этого не хочет ... так вот пользовательская реализация: P ... но да, это правильный ответ imho –

1

Вы можете использовать наборы для отслеживания увиденных предметов и дубликатов:

>>> words = 'the fox jumped over the lazy dog and over the bear'.split() 
>>> seen = set() 
>>> dups = set() 
>>> for word in words: 
     if word in seen: 
      if word not in dups: 
       print(word) 
       dups.add(word) 
     else: 
      seen.add(word) 


the 
over 
+1

отлично отвечающий imho ... –

+0

Наборы не являются самым ясным решением, например, строка может начинаться с «Слова» и заканчивается «словом». Это не то же самое для Python и устанавливает. Но для нас они такие же. – GLHF

+0

Итак, ваши наборы могут иметь «слово» и «слово». но это то же самое для нас, это не самое ясное решение. – GLHF

-1

Для этого своего рода файл;

A hearth came to us from your hearth 
foreign hairs with hearth are same are hairs 

Это проверит whole стихотворение;

lst = [] 
with open ("coz.txt") as f: 
    for line in f: 
     for word in line.split(): #splited by gaps (space) 
      if word not in lst: 
       lst.append(word) 
      else: 
       print (word) 

Выход:

>>> 
hearth 
hearth 
are 
hairs 
>>> 

Как вы видите, есть два hearth здесь, потому что в целом стихотворении есть 3 hearth.

Для проверки линии за строкой;

lst = [] 
lst2 = [] 
with open ("coz.txt") as f: 
    for line in f: 
     for word in line.split(): 
      lst2.append(word) 
      for x in lst2: 
       if x not in lst: 
        lst.append(x) 
        lst2.remove(x) 
print (set(lst2)) 

>>> 
{'hearth', 'are', 'hairs'} 
>>> 
+0

Использование поиска по линейному списку почти никогда не является хорошей рекомендацией, когда вы можете использовать поиск хэш-таблицы O (1) с помощью dict или set вместо этого. –

0
with open (r"specify the path of the file") as f: 
    data = f.read() 
    if(set([i for i in data if f.count(f)>1])): 
     print "Duplicates found" 
    else: 
     print "None" 
Смежные вопросы