You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Wikidata SPARQL中忽略特殊字符按标题搜索电影

在Wikidata中忽略特殊字符匹配电影标题的SPARQL方案

要实现忽略标题中的特殊字符(冒号、横线、空格变体等)进行电影匹配,核心思路是将用户输入的搜索词和Wikidata中的标题统一清洗成标准化格式,再做匹配。以下是具体的SPARQL查询实现:

完整查询示例

SELECT ?item ?itemLabel WHERE {
  # 替换为你的搜索关键词
  BIND("Guyver Dark Hero" AS ?searchTerm)
  
  # 清洗搜索词:移除特殊字符、规整空格
  BIND(
    REPLACE(
      REPLACE(
        REPLACE(?searchTerm, "[\\-:\\–]", " "),  # 把冒号、短横线、长破折号替换为空格
        "\\s+", " "                             # 合并连续空格为单个空格
      ), 
      "^\\s+|\\s+$", ""                         # 移除首尾空格
    ) AS ?cleanedSearch
  )
  
  # 限定为电影实例
  ?item wdt:P31 wd:Q11424.
  
  # 获取英文标题(可根据需求修改语言参数)
  ?item rdfs:label ?label.
  FILTER(LANG(?label) = "en")
  
  # 清洗Wikidata中的标题,逻辑和搜索词一致
  BIND(
    REPLACE(
      REPLACE(
        REPLACE(?label, "[\\-:\\–]", " "),
        "\\s+", " "
      ), 
      "^\\s+|\\s+$", ""
    ) AS ?cleanedLabel
  )
  
  # 匹配清洗后的标题(精确匹配)
  FILTER(?cleanedLabel = ?cleanedSearch)
  
  # 自动返回标签(避免手动处理多语言)
  SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
}

关键逻辑说明

  1. 字符串清洗:通过三次REPLACE函数完成标准化:
    • 第一步:将冒号(:)、短横线(-)、长破折号(–)等特殊字符替换为空格;
    • 第二步:把连续的多个空格合并成单个空格,避免因空格数量不同导致不匹配;
    • 第三步:移除字符串首尾的空格,统一格式。
  2. 实例限定:用wdt:P31 wd:Q11424确保只匹配Wikidata中的电影条目。
  3. 语言过滤:FILTER(LANG(?label) = "en")限定只匹配英文标题,可根据需要改为其他语言代码(如zh)。

扩展优化

  • 支持部分匹配:如果不需要精确匹配,可将最后的FILTER改为FILTER(CONTAINS(?cleanedLabel, ?cleanedSearch)),这样输入关键词的一部分也能命中结果。
  • 扩展特殊字符范围:若需要忽略更多特殊字符(如感叹号、括号等),只需修改正则表达式,例如"[\\-:\\–!@#$%^&*()]"。

内容的提问来源于stack exchange,提问作者user758030

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 15:10:09