一个字符串拆分问题

2022-09-13 15:59:41 +08:00
 mantis

字符串拆分问题:

有如下字符串:

你关注的杨幂有 10 个未看

有如下关键字:

["杨幂", 10]

将字符串按关键字拆分为数组:

["你关注的", "杨幂", "有", 10, "个未看"]

该怎么解决?

3018 次点击
所在节点    PHP
22 条回复
Kinnice
2022-09-13 16:03:26 +08:00
preg_split
leoQaQ
2022-09-13 16:07:22 +08:00
1. 先用"杨幂"去拆分数组,得到 ["你关注的","有 10 个未看"];
2. 把"杨幂" 插入数组,得到["你关注的","杨幂","有 10 个未看"];
3. 再用第二个关键字"10" 去拆分新数组的后一个元素, 得到["有","个未看"];
4. 把"10" 插入数组,然后就没有然后了
2kCS5c0b0ITXE5k2
2022-09-13 16:07:41 +08:00
正则
crayygy
2022-09-13 16:10:27 +08:00
jieba ?
Kinnice
2022-09-13 16:12:49 +08:00
<?php
$arr = preg_split("/(10|杨幂)/","你关注的杨幂有 10 个未看", -1, PREG_SPLIT_DELIM_CAPTURE);
print_r ($arr);
?>
Jooooooooo
2022-09-13 16:17:54 +08:00
边缘的 case 如果要拆分 "杨幂" 和 "幂有" 结果是啥?
eason1874
2022-09-13 16:23:11 +08:00
1 、像 #5 那样用正则
2 、先用 str_replace 在关键词前后插入分隔符,再用 explode 分割成数组

数量大的话,两种都试试,有些场景第二种比较快
ipwx
2022-09-13 16:25:45 +08:00
楼主的原问题是什么。

总觉得又是个 XY problem
lmshl
2022-09-13 16:27:44 +08:00
先确定下你这是不是一个 NLP 需求
lmshl
2022-09-13 16:29:37 +08:00
sadfQED2
2022-09-13 16:45:10 +08:00
你原问题是啥?看你样子似乎是需要做中文分词?
cydian
2022-09-13 16:45:58 +08:00
@lmshl 这是啥网站或工具?
lmshl
2022-09-13 17:08:04 +08:00
PythonYXY
2022-09-13 17:13:47 +08:00
构建一个有限状态自动机即可
qwertyzzz
2022-09-13 17:16:24 +08:00
怎么和百度搜索 关键词标红有点像
air8712
2022-09-13 17:40:11 +08:00
字典树
haolongsun
2022-09-13 20:44:47 +08:00
不确定的句子->词法分析,直接上 NLP
固定的句子,就像你这个只有关键词是可变的,那么直接正则就 ok
lisongeee
2022-09-13 20:56:45 +08:00
cowcomic
2022-09-13 22:16:04 +08:00
词表有多大?
如果词表很大,百以上,可以上一些 NLP 技术,比如 Trie 树,做词表扫描,再根据扫描结果分割
如果词表不大,几十以内,for 循环和正则都可以
fkdog
2022-09-13 22:48:05 +08:00
楼主问的是全文检索里用的分词,还是说希望将一个字符串按照指定关键词分割开来?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/879736

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX