读取栏目内容后为新栏目添加标签
Add a tag to a new column after reading the column content
我有一个Excel文件,里面有几万个English/Latin和阿拉伯语单词分两列,第一列的名称:"EN",另一列的名称:"AR"。我要处理的专栏是 "AR" 专栏。
我想在只包含阿拉伯语单词的每一行前面的新列中添加'ar',在只包含拉丁语词汇的每一行前面添加'en',并添加'enar' 每行前面包含拉丁语和阿拉伯语词汇。
注意:所有行均使用数字、点“.”、逗号“,”。
我的文件示例,我想做的工作:
EN AR new column
Appel تفاحة ar
Appel (1990) (1990) تفاحة ar
R. Appel ر. تفاحة ar
Red, Appel Red Appel en
Red Appel Red Appel en
R. Appel R. Appel en
Red, Appel تفاحة، Red enar
Red Appel Red تفاحة enar
我如何使用 Python/Pandas 做到这一点?
谢谢大家的帮助。
我想你可以使用这个包 TextBlob 来定义你的新列,
首先,你应该安装 TextBlob 包然后你的代码将是这样的:
from textblob import TextBlob
def detect_language(text):
diff_lang = []
for word in text.split():
diff_lang.append(TextBlob(word).detect_language())
diffrent_language_count = len(list(set(diff_lang)))
if diffrent_language_count > 1 :
return("enar")
elif :
return (diff_lang[0])
df ['new column'] = df['AR'].apply(lambda txt: detect_language(txt))
这是一个可能的解决方案,使用名为 regex
的第三方库。
代码
import pandas as pd
import regex
data = {'AR':[' تفاحة ','(1990) تفاحة', 'ر. تفاحة', 'Red Appel', 'Red Appel', 'R. Appel', 'تفاحة، Red', 'Red تفاحة']}
df = pd.DataFrame(data)
df['is_arabic'] = df['AR'].apply(lambda t: True if regex.search(r'[^\p{Latin}\W]', t) else False)
df['is_latin'] = df['AR'].apply(lambda t: True if regex.search(r'[\p{Latin}a-zA-Z]', t) else False)
#assign 'enar', 'ar', 'en'
def myfunc(t):
if t[0]&t[1]:
return 'enar'
elif t[0]:
return 'ar'
else:
return 'en'
df['new_column'] = df[['is_arabic','is_latin']].apply(myfunc, axis=1)
输出
#print(df)
# AR is_arabic is_latin new_column
# 0 تفاحة True False ar
# 1 (1990) تفاحة True False ar
# 2 ر. تفاحة True False ar
# 3 Red Appel False True en
# 4 Red Appel False True en
# 5 R. Appel False True en
# 6 تفاحة، Red True True enar
# 7 Red تفاحة True True enar
我有一个Excel文件,里面有几万个English/Latin和阿拉伯语单词分两列,第一列的名称:"EN",另一列的名称:"AR"。我要处理的专栏是 "AR" 专栏。
我想在只包含阿拉伯语单词的每一行前面的新列中添加'ar',在只包含拉丁语词汇的每一行前面添加'en',并添加'enar' 每行前面包含拉丁语和阿拉伯语词汇。
注意:所有行均使用数字、点“.”、逗号“,”。
我的文件示例,我想做的工作:
EN AR new column
Appel تفاحة ar
Appel (1990) (1990) تفاحة ar
R. Appel ر. تفاحة ar
Red, Appel Red Appel en
Red Appel Red Appel en
R. Appel R. Appel en
Red, Appel تفاحة، Red enar
Red Appel Red تفاحة enar
我如何使用 Python/Pandas 做到这一点?
谢谢大家的帮助。
我想你可以使用这个包 TextBlob 来定义你的新列, 首先,你应该安装 TextBlob 包然后你的代码将是这样的:
from textblob import TextBlob
def detect_language(text):
diff_lang = []
for word in text.split():
diff_lang.append(TextBlob(word).detect_language())
diffrent_language_count = len(list(set(diff_lang)))
if diffrent_language_count > 1 :
return("enar")
elif :
return (diff_lang[0])
df ['new column'] = df['AR'].apply(lambda txt: detect_language(txt))
这是一个可能的解决方案,使用名为 regex
的第三方库。
代码
import pandas as pd
import regex
data = {'AR':[' تفاحة ','(1990) تفاحة', 'ر. تفاحة', 'Red Appel', 'Red Appel', 'R. Appel', 'تفاحة، Red', 'Red تفاحة']}
df = pd.DataFrame(data)
df['is_arabic'] = df['AR'].apply(lambda t: True if regex.search(r'[^\p{Latin}\W]', t) else False)
df['is_latin'] = df['AR'].apply(lambda t: True if regex.search(r'[\p{Latin}a-zA-Z]', t) else False)
#assign 'enar', 'ar', 'en'
def myfunc(t):
if t[0]&t[1]:
return 'enar'
elif t[0]:
return 'ar'
else:
return 'en'
df['new_column'] = df[['is_arabic','is_latin']].apply(myfunc, axis=1)
输出
#print(df)
# AR is_arabic is_latin new_column
# 0 تفاحة True False ar
# 1 (1990) تفاحة True False ar
# 2 ر. تفاحة True False ar
# 3 Red Appel False True en
# 4 Red Appel False True en
# 5 R. Appel False True en
# 6 تفاحة، Red True True enar
# 7 Red تفاحة True True enar