问题描述
用于从 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'])