如何使用“return”语句?

2024-06-02 07:59:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我将尝试对字典中给定一堆单词的文本进行分类,字典包含词干组和不同的相关单词。另一个方面是,我有一个数据帧,在这个数据帧中,每一个表示。 主要目标是,如果至少有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]。 我认为问题出在这里,因为当我只执行compar函数而没有apply时,它就工作了。

我希望在text['Class'] column: [0, 1],[0, 1],[0, 0],[0, 0]中有这样的输出


Tags: inforlenifrange单词elsefilt
1条回答
网友
1楼 · 发布于 2024-06-02 07:59:51

如果我正确理解了您的问题,请给出以下输入:

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]

相关问题 更多 >