Urllibを使用してWebサイトからhtmlの文字列を取得し、htmlドキュメント内の各Wordをリストに入れる必要があります。
ここに私がこれまでに持っているコードがあります。エラーが発生し続けます。以下のエラーもコピーしました。
import urllib.request
url = input("Please enter a URL: ")
z=urllib.request.urlopen(url)
z=str(z.read())
removeSpecialChars = str.replace("!@#$%^&*()[]{};:,./<>?\|`~-=_+", " ")
words = removeSpecialChars.split()
print ("Words list: ", words[0:20])
これがエラーです。
Please enter a URL: http://simleyfootball.com
Traceback (most recent call last):
File "C:\Users\jeremy.KLUG\My Documents\LiClipse Workspace\Python Project 2\Module2.py", line 7, in <module>
removeSpecialChars = str.replace("!@#$%^&*()[]{};:,./<>?\|`~-=_+", " ")
TypeError: replace() takes at least 2 arguments (1 given)
str.replaceは、あなたがやりたいことに対して間違った関数です(間違って使用されていることは別として)。セット全体を単一のスペースではなく、セットの任意の文字をスペースに置き換えます(後者がreplaceの役割です)。次のような翻訳を使用できます。
removeSpecialChars = z.translate ({ord(c): " " for c in "!@#$%^&*()[]{};:,./<>?\|`~-=_+"})
これにより、特殊文字のリスト内のすべての文字をスペースにマッピングするマッピングが作成され、文字列でtranslate()が呼び出され、特殊文字のセット内のすべての文字がスペースに置き換えられます。
1つの方法は、 re.sub を使用することです。これが、私の好みの方法です。
import re
my_str = "hey th~!ere"
my_new_string = re.sub('[^a-zA-Z0-9 \n\.]', '', my_str)
print my_new_string
出力:
hey there
別の方法は re.escape を使用することです:
import string
import re
my_str = "hey th~!ere"
chars = re.escape(string.punctuation)
print re.sub(r'['+chars+']', '',my_str)
出力:
hey there
パラメータスタイルについての小さなヒントpython by PEP-8 parameters should be remove_special_chars
ではなくremoveSpecialChars
また、keepにしたい場合、スペースを変更するだけで[^a-zA-Z0-9 \n\.]
から[^a-zA-Z0-9\n\.]
文字列変数replace
にある文字を置き換えるため、z
ではなくstr
でz
を呼び出す必要があります。
removeSpecialChars = z.replace("!@#$%^&*()[]{};:,./<>?\|`~-=_+", " ")
しかし、replaceは部分文字列を探すため、これは機能しません。ほとんどの場合、正規表現モジュールre
をsub
関数と共に使用する必要があります。
import re
removeSpecialChars = re.sub("[!@#$%^&*()[]{};:,./<>?\|`~-=_+]", " ", z)
[]
を忘れないでください。これは、置換される文字のセットであることを示しています。
replaceは特定の文字列で動作するため、次のように呼び出す必要があります。
removeSpecialChars = z.replace("!@#$%^&*()[]{};:,./<>?\|`~-=_+", " ")
ただし、これはおそらく、必要なものではありません。これは、すべての文字を同じ順序で含む単一の文字列を検索するためです。ダニー・ミショーが指摘したように、正規表現でそれを行うことができます。
補足として、 BeautifulSoup を探すことをお勧めします。これは、通常のWebサイトのスキャッピングから得られるような、乱雑なHTML形式のテキストを解析するためのライブラリです。
次のように、特殊文字を目的の文字に置き換えることができます。
import string
specialCharacterText = "H#y #@w @re &*)?"
inCharSet = "!@#$%^&*()[]{};:,./<>?\|`~-=_+\""
outCharSet = " " #corresponding characters in inCharSet to be replaced
splCharReplaceList = string.maketrans(inCharSet, outCharSet)
splCharFreeString = specialCharacterText.translate(splCharReplaceList)