字符串拆分问题:
有如下字符串:
你关注的杨幂有 10 个未看
有如下关键字:
["杨幂", 10]
将字符串按关键字拆分为数组:
["你关注的", "杨幂", "有", 10, "个未看"]
该怎么解决?
1
Kinnice 2022-09-13 16:03:26 +08:00
preg_split
|
2
leoQaQ 2022-09-13 16:07:22 +08:00
1. 先用"杨幂"去拆分数组,得到 ["你关注的","有 10 个未看"];
2. 把"杨幂" 插入数组,得到["你关注的","杨幂","有 10 个未看"]; 3. 再用第二个关键字"10" 去拆分新数组的后一个元素, 得到["有","个未看"]; 4. 把"10" 插入数组,然后就没有然后了 |
3
2kCS5c0b0ITXE5k2 2022-09-13 16:07:41 +08:00
正则
|
4
crayygy 2022-09-13 16:10:27 +08:00
jieba ?
|
5
Kinnice 2022-09-13 16:12:49 +08:00
<?php
$arr = preg_split("/(10|杨幂)/","你关注的杨幂有 10 个未看", -1, PREG_SPLIT_DELIM_CAPTURE); print_r ($arr); ?> |
6
Jooooooooo 2022-09-13 16:17:54 +08:00
边缘的 case 如果要拆分 "杨幂" 和 "幂有" 结果是啥?
|
7
eason1874 2022-09-13 16:23:11 +08:00
1 、像 #5 那样用正则
2 、先用 str_replace 在关键词前后插入分隔符,再用 explode 分割成数组 数量大的话,两种都试试,有些场景第二种比较快 |
8
ipwx 2022-09-13 16:25:45 +08:00 2
楼主的原问题是什么。
总觉得又是个 XY problem |
9
lmshl 2022-09-13 16:27:44 +08:00 1
|
10
lmshl 2022-09-13 16:29:37 +08:00
|
11
sadfQED2 2022-09-13 16:45:10 +08:00 via Android
你原问题是啥?看你样子似乎是需要做中文分词?
|
13
lmshl 2022-09-13 17:08:04 +08:00 1
|
14
PythonYXY 2022-09-13 17:13:47 +08:00
构建一个有限状态自动机即可
|
15
qwertyzzz 2022-09-13 17:16:24 +08:00
怎么和百度搜索 关键词标红有点像
|
16
air8712 2022-09-13 17:40:11 +08:00
字典树
|
17
haolongsun 2022-09-13 20:44:47 +08:00
不确定的句子->词法分析,直接上 NLP
固定的句子,就像你这个只有关键词是可变的,那么直接正则就 ok |
18
lisongeee 2022-09-13 20:56:45 +08:00
|
19
cowcomic 2022-09-13 22:16:04 +08:00
词表有多大?
如果词表很大,百以上,可以上一些 NLP 技术,比如 Trie 树,做词表扫描,再根据扫描结果分割 如果词表不大,几十以内,for 循环和正则都可以 |
20
fkdog 2022-09-13 22:48:05 +08:00
楼主问的是全文检索里用的分词,还是说希望将一个字符串按照指定关键词分割开来?
|
21
jinliming2 2022-09-14 00:27:05 +08:00
<?php
$arr = preg_split("/(?<=^你关注的|有\\s)(?:\\B|\\b)|(?:\\B|\\b)(?=(?:有\\s\\d+)?\\s 个未看)/", "你关注的杨幂有 10 个未看"); print_r ($arr); $arr2 = preg_split("/(你关注的)(\S+)(有)\s*(\d+)\s*(个未看)/", "你关注的杨幂有 10 个未看", -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE); print_r ($arr2); |
22
xupefei 2022-09-14 16:24:41 +08:00
AC 自动机
|