如何将POS-tag函数应用于另一列pandas的句子中的字符串

2024-10-02 08:29:12 发布

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

如何使用POS标记从另一列使用Pandas的单词?在

例如,我有:

col1      col2
aaa1      AAa1 is a great friend
abb2      abb2 is a very good friend

我想输出:

^{pr2}$

我试着:

from nltk import pos_tag
columns = ['col1', 'col2']
data = pd.read_csv('data.csv', delimiter='\t', names=columns)
data["col2"] = data.apply(lambda x: x["col1"].replace(x["col1"], pos_tag([x["col2"], x["col1"]])[1][1]), axis=1)

但它不起作用,不要忽视案例信。 我的col1只有小写,col2有小写和大写的单词。如何应用re子模块? 我想把它用于每一行(大约400万行)

编辑: 如果我尝试使用:

data["col2"] = data.apply(lambda x: re.sub(x["col1"], pos_tag([x["col1"].lower(), x["col1"].lower()]), x["col2"], flags=re.I), axis=1)

它不起作用。因为我想输出的是原大小写字母。这是我的目标问题->;我想将字符串替换为NNP和NN作为SVM分类器。在

你知道怎么做吗?在


Tags: columnscsvlambdaposrefrienddatais
1条回答
网友
1楼 · 发布于 2024-10-02 08:29:12

一个简单的函数就可以完成这个任务。你可以这样做:

## import libraries
from nltk import word_tokenize, pos_tag, pos_tag_sents

## tag the sentece
df['col2'] = df['col2'].apply(word_tokenize).apply(pos_tag)

## this function does the magic 
def get_vals(lst):
    op = [] 
    for i, v in enumerate(lst):
        if i == 0:
            op.append(v[1])
        else:
            op.append(v[0])
    return ' '.join(op)

## apply the function
df['col2'] = df['col2'].apply(get_vals)

print(df)

   col1                      col2
0  aaa1     NNP is a great friend
1  abb2  NN is a very good friend

更新的解决方案:

此解决方案适合于用POS标记替换任何位置的字符串。在

^{pr2}$

相关问题 更多 >

    热门问题