我已经按照以下步骤在python中打开了数据集。
with open(page_titles.txt, encoding="utf8") as fg:
all_concepts = []
for line in fg:
all_concepts.append(line)
但是,我的标题中包含一些国际字母数字字符,例如Ռեթէոս_Պէրպէրեան,丘,
我只想保留英文标题。
我尝试执行以下操作。但是,它不能解决我的问题,因为它说上述标题是有效标题。
def remove_non_ascii(text):
non_ascii = 0
ascii_letter = 0
for c in text:
if 0 <= ord(c) <= 127:
# this is a ascii character.
ascii_letter = ascii_letter + 1
else:
# this is a non-ascii character. Do something.
non_ascii = non_ascii + 1
if len(text)==non_ascii:
print("invalid")
else:
print("valid")
请帮助我。
答案 0 :(得分:2)
您的错误在if len(text)==non_ascii
行中。此行测试您输入的所有字符是否不是ASCII(因此,只有一半的字符无效时才有效)。您想要的是测试任何字符是否有效,因此执行此操作:
def remove_non_ascii(text):
non_ascii = 0
for c in text:
if not 0 <= ord(c) <= 127:
non_ascii = non_ascii + 1
if non_ascii > 0: # check if there are any non_ascii characters
print("invalid")
else:
print("valid")
由于未使用ascii_letter
,因此将其删除。
答案 1 :(得分:2)
您的代码当前仅排除完全由非ASCII字符组成的字符串。但是,您显示的所有示例字符串都包含下划线字符(这是ASCII字符),因此根据当前代码使名称有效。
如果这不是您想要的结果,则需要更改代码的工作方式。例如,您可以拒绝带有 any 非ASCII字符的任何字符串(而不是仅包含 all 非ASCII的那些字符串)。只需将if len(text) == non_ascii
更改为if non_ascii > 0
。
但是我要提醒您,排除所有非ASCII字符的字符串可能不是一个好主意。许多英语单词(例如café)和名称(例如Zoë)包含非ASCII字符(至少在某些拼写中)。最好在程序中支持非ASCII标题,并解决它们在其他地方引起的任何其他问题(例如,通过正确编码输入和输出)。如果非ASCII标题由于其他原因而不受欢迎(例如,它们描述的不是英语),则应根据其他标准(例如,内容的语言)过滤掉它们,而不是标题中的字母种类
答案 2 :(得分:1)
执行此操作的Python方法是将字符串解码为ascii
,并捕获UnicodeDecodeError
,当存在非ASCII字符时将抛出该字符串。
try:
text.decode('ascii')
print('valid')
except UnicodeDecodeError:
print('Invalid')
注意
如果您使用的是Python 3.7,则有一个isascii()
函数可检查字符串是否包含所有ascii字符。
if text.isascii():
print('valid')
else:
print('invalid')