前端自然语言处理nlp问题百出,python处理自然语言响当当

为什么要使用自然语言呢,因为在项目中客户要求根据ai对话,来筛选出想要的数据,比如当用户说我想要吃烧烤,这时使用自然语言来把用户的语句分段,分成[我想,要,吃,烧烤],这时在根据mysql已有的数据,来筛选出关于烧烤的商家。

我使用了很多前端自然语言库,比如node-nlp,node-hanlp。
1.node-nlp库似乎只支持英文和一些发达国家,唯独不支持中文。这里如果大家对语言没有要求,一定要注意marager.train执行的时机,我一开始试了好多次,搞不懂为什么一直返回的是空,原因就是:模型没有训练完(也就是manager.addDocument没有执行完)。


// 创建 NLP 管理器实例
const manager = new NlpManager({ languages: ['en'] });

// 训练 NLP 模型
manager.addDocument('en', 'hello', 'my name is sunhe');
manager.addDocument('en', 'money', 'this is $14');

// 创建一个接口来处理聊天请求
app.post('/chat',async (req, res) => {
// 训练模型
await manager.train();
manager.save();

  const { text } = req.body;
  console.log(text);
  
  const response =await manager.process('en', text);
  res.json({ reply: response });
});

2.node-hanlp库,这个库我也搞不懂为什么要安装java环境才能运行,但是我安装完了之后各种报错

const Hanlp = require("node-hanlp");
// 分词库初始化及配置
const HanLP = new Hanlp({
  properties: "/root/hanlp/hanlp.properties", // 配置文件绝对路径
  CustomDict: true, // 使用自定义词典
  NameRecognize: true, // 中国人名识别
  TranslatedNameRecognize: true, // 音译人名识别
  JapaneseNameRecognize: true, // 日本人名识别
  PlaceRecognize: true, // 地名识别
  OrgRecognize: true // 机构名识别
});
let words = HanLP.Tokenizer("商品和服务");
console.log(words);
## 报错信息
Cannot find module '../build/jvm_dll_path.json'

最后我使用了python+spacy解决了这个问题

  1. 安装spacy
pip install spacy
  1. 下载语言模型
python -m spacy download zh_core_web_sm  # 下载小型模型
python -m spacy download zh_core_web_md  # 下载中型模型
python -m spacy download zh_core_web_lg  # 下载大型模型
  1. 示例代码:
import spacy
nlp = spacy.load('zh_core_web_sm')  # 加载小型中文模型
text = "自然语言处理是人工智能领域的一个重要方向。"
doc = nlp(text)
for token in doc:
    print(token.text, token.lemma_, token.pos_, token.dep_)

打印的数据:
在这里插入图片描述

这里我搭配和我的项目来写的,通过spacy中文模型来筛选小皮面板的mysql数据库中merchant表中的商家类型,比如merchant表中有的商家名字是小孙烧烤,老王烧烤,孙鹤卖花,我想通过用户输入烧烤,来筛选出来关于烧烤的一些商家。并且把筛选出来的数据打印出来。

import spacy
import mysql.connector

# 加载 spaCy 中文模型
nlp = spacy.load('zh_core_web_sm')

# 连接到 MySQL 数据库
db = mysql.connector.connect(
    host="localhost",
    user="root",
    password="root",
    database="order_meal"
)
cursor = db.cursor()

# 用户输入的关键词
user_input = "我想吃烧烤"

# 使用 spaCy 处理用户输入
doc = nlp(user_input)

# 提取所有名词作为可能的关键词
keywords = [token.text for token in doc if token.pos_ == 'NOUN']
print(keywords)
# 准备查询语句
query = "SELECT * FROM merchant WHERE name LIKE %s"
# 构建包含所有关键词的查询参数
params = ('%' + '% '.join(keywords) + '%',)

# 执行查询
cursor.execute(query, params)

# 读取所有结果
results = cursor.fetchall()
for result in results:
    print(result)

# 现在可以安全地关闭游标和数据库连接
cursor.close()
db.close()

打印的数据
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值