如何从Pandas Dataframe中分离日语文本和英语文本?

问题描述

我有一个数据框列,其中包含英语和日语文本。就像这样:

----IDs-------Texts ---------
    132   |  復旧完了。よろしく頼む! 
    623   |  This is an English text 
    2364  |  "<@UD3JFBREV> 収集した日本語のツイートデータはどこにありますでしょうか" 
    ...   |  .....

现在,我想从Texts列中将英语文本与日语文本分开。我的新数据框应仅返回英文文本,而忽略日文文本。我该怎么办?

解决方法

好,谢谢您上述可能的解决方案。不幸的是,那些并不能解决我的问题。它对我的数据集起作用的方式是这样的:

df['Texts'] = df[~df.Texts.str.contains(r'[^\x00-\x7F]',na=False)]

这将删除所有包含任何非ASCII字符的行,并将这些行设为NaN。因此,我删除了NaN值,该值使我从数据框中获得了所有英语句子。

,

日语文本为not ascii(它是Unicode),因此您可以根据IS ASCII条件过滤文本。假设您的字符串只能是日语或英语,则可以将字符串方法.isascii()应用于“文本”列的每个元素,如下所示(在Python 3.7及更高版本中):

df[df['Texts'].apply(lambda x: x.isascii())]

在上面的示例中,这将返回:

ids text
123 This is an English text

在早期版本的Python中,您可以执行以下操作:

df[df['text'].apply(lambda x: len(x.encode('utf8')) == len(x))]

(基本上,如果将字符串编码为utf8后,其长度与字符串的总长度相同,则为ASCII,因此必须为英语。)

您可以通过将其应用于字符串来测试其工作原理:

"<@UD3JFBREV> 収集した日本語のツイートデータはどこにありますでしょうか".isascii()
False 

"This is an English text".isascii()
True

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...