私は新しいpythonプログラマーです。次のことを行う簡単なスクリプトを作成しました。
- ユーザーにURLを尋ねる
- URL を読み取ります (urlopen(url).read())
- 上記のコマンドの結果をトークン化します
トークン化の結果を 2 つのファイルに取得します。1 つはラテン文字 (英語、スペイン語など) の単語で、もう 1 つはそれ以外 (ギリシャ語など) の単語です。
問題は、ギリシャ語の URL を開くと、そこからギリシャ語が取得されますが、単語ではなく一連の文字として表示されることです (ラテン語の場合に発生します)。
単語 ( μαρια
、γιωργος
、παιδι
) のリスト (項目数 3) を取得する予定ですが、取得する('μ','α','ρ','ι', 'α'........)
項目の数は文字数と同じです
私は何をすべきか?(エンコーディングはutf-8です)
コードに従います:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#Importing useful libraries
#NOTE: Nltk should be installed first!!!
import nltk
import urllib #mporei na einai kai urllib
import re
import lxml.html.clean
import unicodedata
from urllib import urlopen
http = "http://"
www = "www."
#pattern = r'[^\a-z0-9]'
#Demand url from the user
url=str(raw_input("Please, give a url and then press ENTER: \n"))
#Construct a valid url syntax
if (url.startswith("http://"))==False:
if(url.startswith("www"))==False:
msg=str(raw_input("Does it need 'www'? Y/N \n"))
if (msg=='Y') | (msg=='y'):
url=http+www+url
elif (msg=='N') | (msg=='n'):
url=http+url
else:
print "You should type 'y' or 'n'"
else:
url=http+url
latin_file = open("Latin_words.txt", "w")
greek_file = open("Other_chars.txt", "w")
latin_file.write(url + '\n')
latin_file.write("The latin words of the above url are the following:" + '\n')
greek_file.write("Οι ελληνικές λέξεις καθώς και απροσδιόριστοι χαρακτήρες")
#Reading the given url
raw=urllib.urlopen(url).read()
#Retrieve the html body from the url. Clean it from html special characters
pure = nltk.clean_html(raw)
text = pure
#Retrieve the words (tokens) of the html body in a list
tokens = nltk.word_tokenize(text)
counter=0
greeks=0
for i in tokens:
if re.search('[^a-zA-Z]', i):
#greeks+=1
greek_file.write(i)
else:
if len(i)>=4:
print i
counter+=1
latin_file.write(i + '\n')
else:
del i
#Print the number of words that I shall take as a result
print "The number of latin tokens is: %d" %counter
latin_file.write("The number of latin tokens is: %d and the number of other characters is: %d" %(counter, greeks))
latin_file.close()
greek_file.close()
私はそれをさまざまな方法でチェックしましたが、私が得ることができる限り、プログラムはギリシャ語の文字を認識しますが、ギリシャ語の単語を認識できません。つまり、単語を区切る魔女のスペースです!
端末にスペースを入れてギリシャ語の文章を入力すると、正しく表示されます。何かを読んだときに問題が発生します(htmlページの本文など)
また、text_file.write(i) では、ギリシャ語の i について、text_file.write(i+ '\n') と書くと、結果は不明な文字、別名、エンコーディングが失われます。
上記に関するアイデアはありますか?