如何用spacy模型识别英文文本中的品牌名称

文章介绍了如何使用Postgres数据库处理数据,删除特殊字符,并结合Python的SpaCy库进行自然语言处理。通过选择不同规模的英语模型(en_core_web_sm,en_core_web_md,en_core_web_lg)来识别文本中的品牌名称或其他实体,将处理后的数据存储到新的数据库表中。
摘要由CSDN通过智能技术生成

以postgres数据库为例

1原始数据示例

2 处理数据,将需要识别文本前后特殊字符删除。

update 表名 
set column1 = replace(replace(replace(column1,chr(9),''),chr(10),''),chr(13),''),
column2 =  replace(replace(replace(column2,chr(9),''),chr(10),''),chr(13),'')
where 1 = 1;

3 连接数据库,读取数据进行处理

备注:

1 需要提前下载第三方包

第一步,打开cmd 终端

第二步:下载第三方包

pip install psycopg2
pip install psycopg2.extras
pip install spacy
pip install io
pip install time
pip install en_core_web_lg

en_core_web_sm、en_core_web_md和en_core_web_lg都是SpaCy自然语言处理库中的英语语言模型。

  1. en_core_web_sm:该模型是SpaCy的默认英语模型,适用于小型项目和学术研究。该模型使用的词向量维度为50,包含了英语文本处理所需的基本信息,例如标点符号、词性标注、实体识别等。

  1. en_core_web_md:该模型适用于中型项目和开发任务,其词向量维度为300,比en_core_web_sm更加精确。除了en_core_web_sm的所有功能外,en_core_web_md还可以提供更好的实体识别和句法分析。

  1. en_core_web_lg:该模型是SpaCy最大的英语模型,适用于大型项目和商业应用,其词向量维度为700,提供了最全面的英语文本处理功能。除了en_core_web_md的所有功能外,en_core_web_lg还可以提供更好的词向量表示和词汇多样性,可以更好地处理多样化的英语文本。

总的来说,en_core_web_sm适合处理小型英语文本,en_core_web_md适合处理中型英语文本,en_core_web_lg适合处理大型英语文本。使用不同的模型取决于您的任务和数据规模。

2 需要在postgres 数据库新建一个存放数据的表格

CREATE TABLE 输出数据表名 (
    id text NULL,
    column1 text NULL,
    brand_name text NULL
);

本次输出的数据形式是:

完整代码

import psycopg2
import psycopg2.extras
from config.load_config import get_connect_info
import spacy
import io
import time

class Link_Postgres():
    def __init__(self):
        conf1, conf2 = get_connect_info()
        self.conn2 = psycopg2.connect(
            dbname=数据库名,
            user=用户名,
            password=密码,
            host=ip地址,
            port=端口号
        )
        self.cur2 = self.conn2.cursor()

    def match_title(self):
        # 设置程序开始时间
        start_time = time.time()
        # 读取数据库的表 
        self.cur2.execute("SELECT id ,column1 ,column2 FROM 表名 ")
        a_data = self.cur2.fetchall()
        # 打印从数据库读取出来的数据
        print(a_data)

        # 加载英文模型
        # 这里en_core_web_lg 可以替换成en_core_web_sm,en_core_web_md,使用不同的模型取决于您的任务和数据规模。
        nlp = spacy.load("en_core_web_lg")  
        # 创建列表
        new_record = []
        # 遍历数据
        for a_record in a_data:
            # 拿出column1用nlp模型进行识别
            doc = nlp(a_record[1])
            # 遍历column1中的数据
            for ent in doc.ents:
                # 如果识别出品牌
                if ent.label_ == "ORG":
                    # 将id,column1,识别出的品牌加载到new_data中
                    new_data = (a_record[0],a_record[1],ent.text)
                    print(f'识别出的column1中的品牌{new_data}')
                    # 将所有数据加载到列表中
                    new_record.append(new_data)
        # 创建StringIO对象以保存数据
        data_io = io.StringIO()
        # 遍历所有识别出品牌的数据
        for record in new_record:
            # 当id,column1,识别出的品牌这三个字段同时存在时,
            if len(record) == 3:
                # 将数据写入StringIO对象中
                data_io.write('\t'.join(record) + '\n')
        # 表示要从哪个位置开始偏移;0代表从文件开头开始算起,1代表从当前位置开始算起,2代表从文件末尾算起。
        data_io.seek(0)

        # 使用copy_from方法将数据从StringIO对象复制到表
        self.cur2.copy_from(data_io, 'm_title_20230317', sep='\t', columns=('url', 'html_title', 'brand_name'))
        self.conn2.commit()
        end_time = time.time()
        print(f"数据已处理完成并入库,共耗时{end_time - start_time:.2f}秒")

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
目前,Spacy文支持还不够完善,但是你可以通过自定义模型来实现文命实体识别。 以下是一个简单的例子: 1. 安装Spacy文语言模型 ``` pip install spacy python -m spacy download zh_core_web_sm ``` 2. 编写代码 ```python import spacy from spacy.tokens import Span nlp = spacy.load("zh_core_web_sm") # 自定义实体类型 LABEL = "MY_ENTITY" # 添加实体类型到Spacy的命实体识别器 ner = nlp.get_pipe("ner") ner.add_label(LABEL) # 使用示例文本训练模型 TRAIN_DATA = [("我喜欢喝可乐。", {"entities": [(4, 7, LABEL)]}), ("我是北京市的居民。", {"entities": [(2, 6, LABEL)]}), ("他是上海的一工程师。", {"entities": [(2, 4, LABEL)]})] # 训练模型 for _, annotations in TRAIN_DATA: for ent in annotations.get("entities"): ner.add_label(ent[2]) n_iter = 10 for i in range(n_iter): random.shuffle(TRAIN_DATA) losses = {} for text, annotations in TRAIN_DATA: nlp.update([text], [annotations], losses=losses, drop=0.2) print(losses) # 测试模型 doc = nlp("我喜欢喝可乐和牛奶。我是北京市的居民。他是上海的一工程师。") for ent in doc.ents: print(ent.text, ent.start_char, ent.end_char, ent.label_) ``` 在这个例子,我们定义了一个新的实体类型“MY_ENTITY”,并将其添加到Spacy的命实体识别。然后我们使用一些示例文本来训练模型,并使用测试文本来测试模型。在测试文本,我们可以看到模型成功地识别出了我们定义的实体类型。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值