读取栏目内容后为新栏目添加标签

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