使用 Python 删除包含非 ASCII 字符的单词
Removing Words that contain non-ascii characters using Python
我正在使用以下函数去除非 ASCII 字符
def removeNonAscii(s):
return "".join(filter(lambda x: ord(x)<128, s))
def removeNonAscii1(s):
return "".join(i for i in s if ord(i)<128)
我现在想删除包含任何非 ascii 字符的整个单词。我考虑过测量长度 pre 和 post 函数应用程序,但我相信有更有效的方法。有什么想法吗?
如果您根据 spaces 定义单词,这样的事情可能会起作用:
def containsNonAscii(s):
return any(ord(i)>127 for i in s)
words = sentence.split()
cleaned_words = [word for word in words if not containsNonAscii(word)]
cleaned_sentence = ' '.join(cleaned_words)
请注意,这会将重复的白色space 折叠成一个 space。
最干净(但不一定最有效)的方法是将单词转换为二进制,然后尝试将其解码为 ASCII。如果尝试失败,则该词包含非 ASCII 字符:
def is_ascii(w):
try:
w.encode().decode("us-ascii")
return True
except UnicodeEncodeError:
return False
我想出了以下功能。我删除了所有包含任何 ASCII 字符的单词,但可能可以根据需要扩展范围。
def removeWordsWithASCII(s):
" ".join(filter(lambda x: not re.search(r'[\x20-\x7E]', x), s.split(' ')))
我正在使用以下函数去除非 ASCII 字符
def removeNonAscii(s):
return "".join(filter(lambda x: ord(x)<128, s))
def removeNonAscii1(s):
return "".join(i for i in s if ord(i)<128)
我现在想删除包含任何非 ascii 字符的整个单词。我考虑过测量长度 pre 和 post 函数应用程序,但我相信有更有效的方法。有什么想法吗?
如果您根据 spaces 定义单词,这样的事情可能会起作用:
def containsNonAscii(s):
return any(ord(i)>127 for i in s)
words = sentence.split()
cleaned_words = [word for word in words if not containsNonAscii(word)]
cleaned_sentence = ' '.join(cleaned_words)
请注意,这会将重复的白色space 折叠成一个 space。
最干净(但不一定最有效)的方法是将单词转换为二进制,然后尝试将其解码为 ASCII。如果尝试失败,则该词包含非 ASCII 字符:
def is_ascii(w):
try:
w.encode().decode("us-ascii")
return True
except UnicodeEncodeError:
return False
我想出了以下功能。我删除了所有包含任何 ASCII 字符的单词,但可能可以根据需要扩展范围。
def removeWordsWithASCII(s):
" ".join(filter(lambda x: not re.search(r'[\x20-\x7E]', x), s.split(' ')))