Flashtext 关键字提取在数据帧的末尾返回 NaN

问题描述

用于从 FlashText 中提取关键字的 KeywordProcessor 在数据帧的末尾返回 NaN。数据框的形状是 (14.532.885,6),其中只有一列(包含句子)用于提取某些关键字。

正确应用关键字提取直到行 14.452.474。换句话说,提取不会应用于句子列中的 80.411 行。

from flashtext import KeywordProcessor

kp = KeywordProcessor()
kp.add_keywords_from_dict(keyword_dict=keywords_dict)

df['keywords'] = df['text'].apply(lambda sentence: kp.extract_keywords(sentence=sentence,span_info=False))


df[['text','keywords']][14452474:14452480]

output:
            text                                                keywords
14452474    it is monsoon season in stl today rain rain r...    [friendly]
14452475    hahahah pidgeons then                               []
14452476    nothing planned maybe ill go stay with u and h...   []
14452477    he wont disappoint                                  NaN
14452478    hi doc dickerson howdy opened a new twitter ac...   NaN
14452479    only one more class left for today then im hom...   NaN

解决方法

一个临时的解决方案是创建另一个应用相同函数的列,因为有纯 NaN 值,在这之后合并两个应用的列创建第三列和新列,然后删除前两列,因为它们将有 NaN价值。

df['keywords_1'] = df['text'].apply(lambda sentence: kp.extract_keywords(sentence=sentence,span_info=False))

df['keywords_2'] = df['text'][14452477:].apply(lambda sentence: kp.extract_keywords(sentence=sentence,span_info=False))

df['keywords_result'] = df['text'][14452477:].apply(lambda x: kp.extract_keywords(x))
df['keyword'] = df['keywords_1'].combine_first(df['keywords_2'])
df.drop(columns=['keywords_1','keywords_2'])