2013-03-22 18 views
9

mycorpus.txtapostrof zamienia x92

Human where's machine interface for lab abc computer applications 
A where's survey of user opinion of computer system response time 

stopwords.txt

let's 
ain't 
there's 

Poniższy kod

corpus = set() 
for line in open("path\\to\\mycorpus.txt"): 
    corpus.update(set(line.lower().split())) 
print corpus 

stoplist = set() 
for line in open("C:\\Users\\Pankaj\\Desktop\\BTP\\stopwords_new.txt"): 
    stoplist.add(line.lower().strip()) 
print stoplist 

daje następujący wynik

set(['a', "where's", 'abc', 'for', 'of', 'system', 'lab', 'machine', 'applications', 'computer', 'survey', 'user', 'human', 'time', 'interface', 'opinion', 'response']) 
set(['let\x92s', 'ain\x92t', 'there\x92s']) 

Dlaczego apostrof zmienia się w \ x92 w drugim zestawie?

+1

Nigdy nie używaj edytorów Microsoft, jeśli chcesz pisać teksty ASCII. Jeśli chcesz ich użyć, musisz obsłużyć cp1252 (który obejmuje również "znak zapytania"). – Bakuriu

Odpowiedz

9

Punkt kodowy 92 (hex) w kodowaniu okna-1252 jest kodem kodu Unicode 2019 (hex), który jest "PRAWNYM JEDNYM ZNAKIEM CYTOWANIA". Wygląda to bardzo podobnie do apostrofu i prawdopodobnie jest to rzeczywisty znak, który posiadasz w stopwords.txt, który, jak się domyślałem z powodu interpretacji Pythona, został zakodowany w Windows-1252 lub kodowanie, które dzieli wartości punktów kodowych ASCII i .

'vs'

+0

następnie w pierwszym zestawie dlaczego wyświetla "gdzie jest" zamiast "gdzie \ x92s" ?? –

+0

@PankajSinghal: Prawdopodobnie dlatego, że rzeczywiście masz znak apostrofu ASCII w pierwszym pliku. Aby to potwierdzić, użyj narzędzia takiego jak hexdump do sprawdzenia rzeczywistych bajtów w obu twoich plikach. –

+0

ya, widzę różnicę w postaciach. Więc co powinienem zrobić, aby było czytane jak "nie jest", a nie "ain \ x92t" ??? –

Powiązane problemy