Dzięki Pythonie próbuję zrobić plik tekstowy, a następnie utworzyć jedną długą listę słów (ze słowami w kolejności pojawiają się w dokumencie).

Do czego mam do tej pory, przechodzi przez każdą linię, a następnie zasadniczo dodaje słowa na długą listę.

To ma małzyć każde słowo i usunąć wszelkie znaleziska interpunkcyjne.

wordstory=[a.lower().strip(string.punctuation) for b in [line.split() for line in open('alice.txt')] for a in b]

Wydaje się, że pewna interpunkcja nie jest rozpoznawana przez. Struip (string

Skończyłem w takich sytuacjach z \xe2\x80\x94 nie powinno tam być w ogóle.

..
 'she',
 'spoke\xe2\x80\x94fancy',
 'curtseying',
..

Ponadto, gdy apostrophe występuje obok podwójnej oferty, apostrof nie jest usuwany przez .strip(string.punctuation). Skończę z:

..
'she',
 "couldn't",
 'answer',
..

Czy ktoś może podać jakiś kod, który pomoże, i lub wskazuje mnie do zasobu, który pomoże mi zrozumieć, co się dzieje?

0
user3436624 14 sierpień 2014, 00:55

2 odpowiedzi

Najlepsza odpowiedź

Myślę, że masz problemy z Unicode, a także niepotrzebnie zaciemnione z rozumieniem listy.

Polecałbym coś takiego:

# -*- coding: utf-8 -*-

import string

file = open("""text_file.txt""", "r")
raw_text = file.read()

# stripping punctuation
punctuation = set(string.punctuation)
trimmed_text = ''.join(char for char in raw_text if char not in punctuation)

# splitting into list
word_list = trimmed_text.split(" ")

# removing duplicates
unique_word_list = set(word_list)

# or if you're preserving the order, maybe try:
unique_word_list = []
for word in word_list:
    if word not in unique_word_list:
        unique_word_list.append(word)

print(unique_word_list)
0
Charles Clayton 13 sierpień 2014, 21:40

Jeśli chcesz usunąć wszystkie użycie interpunkcyjne translate i string.maketrans:

In [94]: import string

In [95]: a ="she's all foo!"

In [96]: a.lower().translate(string.maketrans("",""), string.punctuation)
Out[96]: 'shes all foo'

str.strip Usuwa tylko znaki z końca lub początek łańcucha.

0
Padraic Cunningham 13 sierpień 2014, 21:21