Saya menggunakan NLTK untuk melakukan pengelompokan kmeans pada file teks saya di mana setiap baris dianggap sebagai dokumen. Jadi misalnya, file teks saya kira-kira seperti ini:
belong finger death punch <br>
hasty <br>
mike hasty walls jericho <br>
jägermeister rules <br>
rules bands follow performing jägermeister stage <br>
approach
Sekarang kode demo yang saya coba jalankan adalah ini:
import sys
import numpy
from nltk.cluster import KMeansClusterer, GAAClusterer, euclidean_distance
import nltk.corpus
from nltk import decorators
import nltk.stem
stemmer_func = nltk.stem.EnglishStemmer().stem
stopwords = set(nltk.corpus.stopwords.words('english'))
@decorators.memoize
def normalize_word(word):
return stemmer_func(word.lower())
def get_words(titles):
words = set()
for title in job_titles:
for word in title.split():
words.add(normalize_word(word))
return list(words)
@decorators.memoize
def vectorspaced(title):
title_components = [normalize_word(word) for word in title.split()]
return numpy.array([
word in title_components and not word in stopwords
for word in words], numpy.short)
if __name__ == '__main__':
filename = 'example.txt'
if len(sys.argv) == 2:
filename = sys.argv[1]
with open(filename) as title_file:
job_titles = [line.strip() for line in title_file.readlines()]
words = get_words(job_titles)
# cluster = KMeansClusterer(5, euclidean_distance)
cluster = GAAClusterer(5)
cluster.cluster([vectorspaced(title) for title in job_titles if title])
# NOTE: This is inefficient, cluster.classify should really just be
# called when you are classifying previously unseen examples!
classified_examples = [
cluster.classify(vectorspaced(title)) for title in job_titles
]
for cluster_id, title in sorted(zip(classified_examples, job_titles)):
print cluster_id, title
(yang juga dapat ditemukan di sini )
Kesalahan yang saya terima adalah ini:
Traceback (most recent call last):
File "cluster_example.py", line 40, in
words = get_words(job_titles)
File "cluster_example.py", line 20, in get_words
words.add(normalize_word(word))
File "", line 1, in
File "/usr/local/lib/python2.7/dist-packages/nltk/decorators.py", line 183, in memoize
result = func(*args)
File "cluster_example.py", line 14, in normalize_word
return stemmer_func(word.lower())
File "/usr/local/lib/python2.7/dist-packages/nltk/stem/snowball.py", line 694, in stem
word = (word.replace(u"\u2019", u"\x27")
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe2 in position 13: ordinal not in range(128)
Apa yang terjadi disini?
python
python-2.7
pengguna2602812
sumber
sumber
decode
metode ini tetap merupakan cara yang lebih disukai untuk mendekode string byte ke string Unicode. (Meskipun, tipe-tipe dalam jawaban saya tidak cocok untuk Python 3 - untuk Python 3, kami mencoba untuk mengubah daribytes
menjadistr
daripada daristr
keunicode
.)Ini berfungsi baik untuk saya.
Anda dapat menambahkan pengkodean parameter ketiga untuk memastikan jenis pengkodean adalah 'utf-8'
Catatan: metode ini berfungsi dengan baik di Python3, saya tidak mencobanya di Python2.7.
sumber
TypeError: 'encoding' is an invalid keyword argument for this function
TypeError: 'encoding' is an invalid keyword argument for this function
Ini berfungsi dengan baik:import io with io.open(file_path, 'r', encoding="utf-8") as f: for line in f: do_something(line)
Bagi saya ada masalah dengan pengkodean terminal. Menambahkan UTF-8 ke .bashrc memecahkan masalah:
Jangan lupa memuat ulang .bashrc sesudahnya:
sumber
export LC_ALL=C.UTF-8
Ubuntu 18.04.3 dan Python 3.6.8. Kalau tidak, ini menyelesaikan masalah saya, terima kasih.Anda juga dapat mencoba ini:
sumber
Ketika di Ubuntu 18.04 menggunakan Python3.6 saya telah memecahkan masalah dengan melakukan keduanya:
dan jika Anda menjalankan alat sebagai baris perintah:
Perhatikan bahwa jika Anda menggunakan Python2.7, Anda harus melakukannya secara berbeda. Pertama, Anda harus mengatur penyandian default:
dan kemudian untuk memuat file yang harus Anda gunakan
io.open
untuk mengatur pengkodean:Anda masih perlu mengekspor env
sumber
Saya mendapat kesalahan ini ketika mencoba menginstal paket python dalam wadah Docker. Bagi saya, masalahnya adalah bahwa gambar buruh pelabuhan tidak
locale
dikonfigurasi. Menambahkan kode berikut ke Dockerfile memecahkan masalah bagi saya.sumber
Untuk menemukan ANY dan ALL error terkait unicode ... Menggunakan perintah berikut:
Ditemukan milikku di
Dengan menggunakan
shed
, saya menemukan urutan yang menyinggung. Ternyata itu merupakan kesalahan editor.sumber
Anda dapat mencoba ini sebelum menggunakan
job_titles
string:sumber
Untuk python 3, penyandian default adalah "utf-8". Langkah-langkah berikut disarankan dalam dokumentasi dasar: https://docs.python.org/2/library/csv.html#csv-examples dalam hal terjadi masalah
Buat fungsi
Kemudian gunakan fungsi di dalam pembaca, misalnya
sumber
python3x atau lebih tinggi
memuat file dalam aliran byte:
body = '' untuk baris di open ('website / index.html', 'rb'): decodedLine = lines.decode ('utf-8') body = body + decodedLine.strip () return body
gunakan pengaturan global:
import io import sys sys.stdout = io.TextIOWrapper (sys.stdout.buffer, enkode = 'utf-8')
sumber
Gunakan,
open(fn, 'rb').read().decode('utf-8')
bukan hanyaopen(fn).read()
sumber