【问题标题】:Splitting unicode string in separate words. Can you use 'space' to split?将 unicode 字符串拆分为单独的单词。你能用“空间”来分割吗?
【发布时间】:2018-03-21 10:04:39
【问题描述】:

我正在开发一个支持 Unicode 的全文搜索后端。

(数据库 PostgreSQL 9.5、PHP7、Ubuntu 17、Apache2)。

数据库正在正确地索引(使用 tsearch)相关的文本数据。到目前为止,一切都很好。

现在我需要使用用户提供的搜索词来搜索数据。我的第一个想法是使用explode(" ", $rawseachstring) 拆分搜索字符串,然后搜索单个单词,生成具有最佳匹配的结果集。

然而,Unicode 似乎定义了一大堆“类似空格”的字符,请参阅下一篇文章:

http://jkorpela.fi/chars/spaces.html

在尝试理解该页面(由 Unicode 大师 Korpela 编写)之后,我想知道将字符串拆分为 ' ' 是否有点幼稚。

是否应该对所有可能的“类似空格”字符进行拆分?

【问题讨论】:

    标签: php unicode split full-text-search


    【解决方案1】:

    使用unicode property for spaces\p{Zs}

    $words = preg_split('/\p{Zs}/u', $rawseachstring);
    

    【讨论】:

    • 非常感谢,正是我所需要的。当一个人不说/写它支持的大多数语言时,很难使用 unicode。这似乎与多种“空间”相匹配。
    【解决方案2】:

    如果您期望这些类型的空格,那么您可以使用 preg_split 来分解多个字符的正则表达式。

    $words = preg_split('/regex/', $string);
    

    但是,请考虑使用 LIKE 关键字进行查询,以仅获取可能匹配的结果。

    【讨论】:

    • 在 postgres 中使用 tsearch 时,LIKE 不是一个选项。但是你关于分裂的建议是声音。托托给出了一个很好的解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-12
    • 2018-04-26
    • 2014-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-20
    相关资源
    最近更新 更多