You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将DataFrame文本列分词为保留语义的短语而非单个单词?

保留语义短语的分词方法

针对你遇到的单个分词丢失金额+货币这类关键短语语义的问题,推荐以下几种实用方案:

1. 自定义规则分词

针对你数据里的金额+货币、银行名称这类固定结构的短语,可以写简单的正则表达式匹配提取,直接锁定关键语义单元。

示例代码:

import re
import pandas as pd

data =  ['bank a earned 3 million usd through investing in certain funds and earned 500k eur from other investments in 2020', 'bank b earned 2 million usd from borrowing and 500k gbp from investments in 2020', 'bank c earned 600k chf and 300k aud from investing and borrowing respectively in 2020']
df = pd.DataFrame(data, columns=['text'])

# 定义要匹配的短语模式
pattern = r'(bank [a-z])|(\d+ (million|k) [a-z]{3})|(investing|borrowing|investments)'

# 提取匹配的短语并整理结果
df['phrases'] = df['text'].apply(lambda x: re.findall(pattern, x.lower()))
df['phrases'] = df['phrases'].apply(lambda x: [item for tup in x for item in tup if item != ''])

print(df['phrases'])

输出会是每个文本对应的关键短语列表,比如第一个文本的结果为['bank a', '3 million usd', 'investing', '500k eur', 'investments'],完美保留核心语义。

2. 使用n-gram提取连续短语

n-gram会把文本中连续的n个词组合成短语,你可以按需选择2-gram(两个词)或3-gram(三个词),保留像"3 million"、"million usd"这类连续语义单元。

示例代码:

from sklearn.feature_extraction.text import CountVectorizer
import pandas as pd

data =  ['bank a earned 3 million usd through investing in certain funds and earned 500k eur from other investments in 2020', 'bank b earned 2 million usd from borrowing and 500k gbp from investments in 2020', 'bank c earned 600k chf and 300k aud from investing and borrowing respectively in 2020']
df = pd.DataFrame(data, columns=['text'])

# 初始化工具,设置提取2-gram和3-gram
vectorizer = CountVectorizer(ngram_range=(2,3), stop_words='english')
# 给每个文本提取对应的ngram
df['ngrams'] = df['text'].apply(lambda x: [ngram for ngram in vectorizer.build_analyzer()(x)])

print(df['ngrams'])

这种方法快速易操作,后续可通过停用词过滤或频率筛选去除无意义组合。

3. 用spaCy提取名词短语

spaCy这类NLP工具能自动识别文本中的名词短语(NP),这类短语通常是核心语义载体,比如金额、机构名称、动作相关名词组。

示例代码:

import spacy
import pandas as pd

# 加载英文模型
nlp = spacy.load("en_core_web_sm")

data =  ['bank a earned 3 million usd through investing in certain funds and earned 500k eur from other investments in 2020', 'bank b earned 2 million usd from borrowing and 500k gbp from investments in 2020', 'bank c earned 600k chf and 300k aud from investing and borrowing respectively in 2020']
df = pd.DataFrame(data, columns=['text'])

# 定义提取名词短语的函数
def extract_noun_phrases(text):
    doc = nlp(text.lower())
    return [chunk.text for chunk in doc.noun_chunks]

df['noun_phrases'] = df['text'].apply(extract_noun_phrases)
print(df['noun_phrases'])

输出会包含"bank a"、"3 million usd"、"investments"这类核心短语,贴合你找出银行盈利方式的需求。

4. 依存句法分析锁定关联短语

如果想精准提取“银行-盈利方式-金额”的关联短语,可以用依存句法分析,找到动词"earned"的主语(银行)、宾语(金额)、方式状语(盈利方式),组合成关联短语。

示例代码(基于spaCy):

import spacy
import pandas as pd

nlp = spacy.load("en_core_web_sm")

data =  ['bank a earned 3 million usd through investing in certain funds and earned 500k eur from other investments in 2020', 'bank b earned 2 million usd from borrowing and 500k gbp from investments in 2020', 'bank c earned 600k chf and 300k aud from investing and borrowing respectively in 2020']
df = pd.DataFrame(data, columns=['text'])

def extract_related_phrases(text):
    doc = nlp(text.lower())
    result = []
    for token in doc:
        if token.text == 'earned':
            # 提取主语(银行)
            subject = [child.text for child in token.children if child.dep_ == 'nsubj']
            # 提取宾语(金额)
            obj = [child.text for child in token.children if child.dep_ == 'dobj']
            # 提取方式状语(盈利方式)
            prep = [child for child in token.children if child.dep_ == 'prep']
            manner = [grandchild.text for p in prep for grandchild in p.children if grandchild.dep_ == 'pobj']
            # 组合关联短语
            if subject and obj and manner:
                result.append(f"{subject[0]} - {manner[0]} - {obj[0]}")
            elif subject and obj:
                result.append(f"{subject[0]} - {obj[0]}")
    return result

df['related_phrases'] = df['text'].apply(extract_related_phrases)
print(df['related_phrases'])

第一个文本的输出为['bank a - investing - 3 million usd', 'bank a - investments - 500k eur'],直接关联银行、盈利方式和金额,完全满足你的分析目标。


内容的提问来源于stack exchange,提问作者Qaaqq11282211

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 23:45:40