Jestem nowy w Pythonie i próbuję znaleźć największe słowo w alice_in_waorderland.txt. Myślę, że mam dobry system skonfigurowany ("patrz poniżej"), ale moje wyjście zwraca "słowo" z myślnikami łączącymi wiele słów. Czy istnieje, aby usunąć kreski w wejściu pliku? W przypadku pliku tekstowego odwiedź Oto

Próbka z pliku tekstowego:

To bardzo ważne, powiedział król, obracając się do jury. Po prostu zaczynają pisać na ich łupkach, gdy biały królik przerwał: Nieważne, twoja Królewska ma oczywiście, oczywiście, "powiedział w bardzo szacunku ton, ale marszcząc brwi i robienie twarzy na niego, gdy mówił. "Nieważne, oczywiście, miałem na myśli", powiedział, że król pospiesznie powiedział, i udał się do siebie w okresie, ważne - nieistotne - nieważne - ważne - ważne - ", jakby próbował, które słowo brzmiało najlepiej".

Kod:


    #String input
    with open("alice_in_wonderland.txt", "r") as myfile:
        string=myfile.read().replace('\n','')
    #initialize list
    my_list = []
    #Split words into list
    for word in string.split(' '):
        my_list.append(word)
    #initialize list
    uniqueWords = []
    #Fill in new list with unique words to shorten final printout
    for i in my_list:
        if not i in uniqueWords:
            uniqueWords.append(i)
    #Legnth of longest word
    count = 0
    #Longest word place holder
    longest = []
    for word in uniqueWords:
        if len(word)>count:
            longest = word
            count = len(longest)
        print longest
0
Cody Glickman 17 sierpień 2014, 03:00

3 odpowiedzi

Najlepsza odpowiedź
>>> import nltk # pip install nltk
>>> nltk.download('gutenberg')
>>> words = nltk.corpus.gutenberg.words('carroll-alice.txt')
>>> max(words, key=len) # find the longest word
'disappointment'
3
jfs 16 sierpień 2014, 23:40

Użyj str.replace, aby wymienić kreski ze spacjami (lub cokolwiek chcesz). Aby to zrobić, po prostu dodaj kolejny telefon, aby zastąpić po pierwszym połączeniu online 3:

string=myfile.read().replace('\n','').replace('-', ' ')
0
Alex 16 sierpień 2014, 23:04

Oto jeden sposób za pomocą re i mmap:

import re
import mmap

with open('your alice in wonderland file') as fin:
    mf = mmap.mmap(fin.fileno(), 0, access=mmap.ACCESS_READ)
    words = re.finditer('\w+', mf)
    print max((word.group() for word in words), key=len)

# disappointment

Znacznie bardziej wydajny niż ładowanie pliku do pamięci fizycznej.

2
Jon Clements 16 sierpień 2014, 23:22