Добавить тег в новый столбец после прочтения содержимого столбца - PullRequest
1 голос
/ 09 ноября 2019

У меня есть файл Excel, в котором содержатся десятки тысяч английских / латинских и арабских слов в двух столбцах, имя первого столбца: «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?

Спасибо, ребята, за вашу помощь.

Ответы [ 2 ]

1 голос
/ 09 ноября 2019

Вот возможное решение с использованием сторонней библиотеки с именем 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
0 голосов
/ 09 ноября 2019

Я думаю, что вы можете использовать этот пакет 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))
...