我在資料框架中有一列(相當長)的文本,對于每個文本,我想洗掉的句子索引串列。這些句子索引是由Spacy在我將文本分割成句子時生成的。請考慮下面的例子:
import pandas as pd
import spacy
nlp = spacy.load('en_core_web_sm')
data = {'text': ['我是A,我是30歲的。我住在紐約。','我是B,我今年25歲。我住在SD。','我是C,我30歲。我住在德克薩斯州。 '], 'todel': [[1, 2], [1, 2]]}。
df = pd.DataFrame(data)
def get_sentences(text)。
text_clean = nlp(text)
句子 = text_clean.sents
sents_list = []
for句子 in句子。
sents_list.append(str(句子))
return sents_list
df['text'] = df['text'] .apply(get_sentences)
print(df)
這就得到了以下結果:
text todel
0 [I am A., I am 30 years old. , I live in NY.] [1, 2]
1 [我是B,我25歲,我住在SD。] [1]
2 [我是C,我30歲,我住在德克薩斯州。] [1, 2]
你將如何有效地洗掉存盤在todel中的句子,要知道我有一個非常大的資料集,每一行都有超過50個句子需要洗掉?
我的預期輸出將是:
text todel
0 [I live in NY. ] [1, 2]
1 [I am 25 years old. , I live in SD.] [1]
2 [I live in TX.] [1,2]
uj5u.com熱心網友回復:
試試這個:
import pandas as pd
data = {'text': ['我是A,我是30歲的。我住在紐約。','我是B,我今年25歲。我住在SD。','我是C,我30歲。我住在德克薩斯州。 '], 'todel': [[1, 2], [1, 2]]}。
df = pd.DataFrame(data)
def fun(sen, lst):
return ('. ' . join(s for idx, s in enumerate(sen.split('. ' )) if idx 1 not in lst>)
df['text'] = df. apply(lambda row : fun(row['text'],row['todel']), axis=1)
輸出:
text todel
0 I live in NY. [1, 2]
1 我是25歲。我住在在SD。 [1]
2 我住在在德克薩斯州。 [1, 2]
根據編輯的問題進行編輯 :
如果df['text']串列中的句子你不需要拆分,你可以試試這個:
data = {'text': [['I am A。 ', '我是30歲。', '我住在紐約。']。
['我是B。', '我25歲。', '我住在SD。'] 。
['我是C。','我30歲。','我住在德州。 ']], 'todel': [[1, 2], [1, 2]]}。
df = pd.DataFrame(data)
# text todel[/span
# 0 [我是A,我30歲。,我住在紐約。] [1, 2]
# 1 [我是B,我25歲。,我住在SD。] [1]
# 2 [I am C., I am 30 years old., I live in TX. ] [1, 2]/span>
def fun(sen, lst) 。
return [s for idx , s in enumerate(sen) if not idx 1 in lst] 。
df['text'] = df. apply(lambda row : fun(row['text'],row['todel']), axis=1)
print(df)
輸出:
text todel
0 [I live in NY.] [1, 2]
1 [I am 25 years old. , I live in SD.] [1]
2 [ I live in TX. ] [1, 2]
uj5u.com熱心網友回復:
基于@用戶1740577的回答:
def fun(sen, lst) 。
return [i for j, i in enumerate(sen) if j not in lst]
df['text'] = df. apply(lambda row : fun(row['text'],row['todel']), axis=1)
根據Spacy的索引,產生了想要的結果:
text todel
0 [I am A.] [1, 2]
1 [我是B,我是25歲。] [1]
2 [我是C,我是30歲。] [1, 2]
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/325718.html
標籤:
上一篇:自然數的串列=>回傳布林值
