Как использовать оператор возврата? - PullRequest
0 голосов
/ 22 сентября 2019

Я попытаюсь классифицировать текст по паре слов в словаре, словарь содержит основанные на группах группы с соотнесенными разными словами.И еще один аспект заключается в том, что у меня есть датафрейм, в котором каждый представитель и статья.Основная цель состоит в том, чтобы, если хотя бы 50% слов в группе были найдены, ему будет присвоено 1 в противном случае 0.

stemmed_search = {Group_1:['solicit', 'requier', 'día'], Group_2:['infraestruc', 'construccion', 'gas', 'nigrogen']}
test = ['solicit', 'requier', 'día', 'infraestruc', 'construccion', 'gas', 'nigrogen']
word_list = [['solicit', 'requier', 'día'], ['infraestruc', 'construccion', 'gas', 'nigrogen']]
def compar(test):
    for item in stemmed_search.values():
        filt = []
        for i in item:
            if i in test:
                filt.append(True)
            else:
                filt.append(False)
        #print(filt)
        umbral = len(filt) * 0.5
        Trues = filt.count(True)

    return[1 if Trues > umbral else 0 for i in range(0, len(words_list))]

text['Class'] = text.Stem.apply(compar)

Я пытался использовать это утверждение, но это нене работает:

return[1 if Trues > umbral else 0 for i in range(0,len(filt))]

Тогда у меня есть это: [1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0].Позже предположим, что проблема была в range списка, поэтому я изменился, и у меня был похожий результат, который я ожидал:

return[1 if Trues > umbral else 0 for i in range(0, len(words_list))]

Но когда я выполнил эту строку, вывод очень похож на то, что я хочу: [1, 1],[1, 1],[0, 0],[0, 0].Я думаю, что проблема здесь, потому что, когда я только выполняю функцию comprar без apply, она работает.

Я ожидаю такой вывод в text['Class'] column: [0, 1],[0, 1],[0, 0],[0, 0]

1 Ответ

2 голосов
/ 23 сентября 2019

Если я правильно понял вашу проблему, введите следующие данные:

stemmed_search = {'Group_1':['solicit', 'requier', 'día'], 'Group_2':['infraestruc', 'construccion', 'gas', 'nigrogen']}
test = ['solicit', 'requier', 'día', 'infraestruc', 'construccion', 'gas', 'nigrogen']
test2 = ['solicit', 'lol', 'lol', 'infraestruc', 'construccion', 'gas', 'nigrogen']

df = pd.DataFrame([[test,test2]], ['Stem']).T
                                                Stem
0  [solicit, requier, día, infraestruc, construcc...
1  [solicit, lol, lol, infraestruc, construccion,...

Этот код для вас:

def compar2(test):
    test = set(test)
    return [1 if len(set(group) - test) < len(group) * 0.5 else 0 for _,group in stemmed_search.items()]

df['Text'] = df.Stem.apply(lambda x: compar2(x))

И дает:

                                            Stem      Text
0  [solicit, requier, día, infraestruc, construcc...  [1, 1]
1  [solicit, lol, lol, infraestruc, construccion,...  [0, 1]

РЕДАКТИРОВАТЬ : Другой пример:

def category_name(test):
    return [k for k,group in stemmed_search.items() if len(set(group) - set(test)) < len(group) * 0.5]

stemmed_search = {'Food': ['pizza', 'chips', 'cheese', 'tomato', 'apple'], 
                  'Animal': ['horse', 'snake', 'dog', 'cat'],
                  'School': ['book', 'pen', 'vocabolary', 'homework', 'student']
                 }
stemmed_articles = [['macheroni', 'car', 'pizza', 'free', 'dog', 'apple', 'chips'],
                    ['dog', 'hungry', 'cat', 'kill', 'snake', 'gas', 'apple'],
                    ['student', 'train', 'car', 'pen', 'homework', 'table', 'book']
                   ]

df = pd.DataFrame([stemmed_articles], ['stemmed_articles']).T
df['categories'] = df.stemmed_articles.apply(lambda x: compar2(x))
df['categories_name'] = df.stemmed_articles.apply(lambda x: category_name(x))

И дает:

                                    stemmed_articles categories  categories_name  
0   [macheroni, car, pizza, free, dog, apple, chips]  [1, 0, 0]  [Food] 
1        [dog, hungry, cat, kill, snake, gas, apple]  [0, 1, 0]  [Animal] 
2  [student, train, car, pen, homework, table, book]  [0, 0, 1]  [School]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...