使用正则表达式解析字典条目

时间:2010-06-09 01:50:50

标签: ruby regex

我正试图从Jim Breen的WWWJDIC中提取数据。返回的原始数据有许多以不同格式分隔的信息。

以下示例中提取的数据来自此处: http://www.csse.monash.edu.au/~jwb/cgi-bin/wwwjdic.cgi?1ZUJ%E5%85%88%E7%94%9F

先生[せんせい] /(n)(1)老师/主人/医生/(suf)(2)以教师姓名等作为敬意/(P)/

我应该使用正则表达式吗?

2 个答案:

答案 0 :(得分:0)

正则表达式可以在这里工作;数据似乎以简单的“headword [假名] /定义/”格式返回,其中定义也可以包含斜杠。您应该知道某些条目将省略“[假名]”(例如,尝试搜索ハンバーグ。

此外,您应该知道WWWJDIC使用的原始字典文件也可在此处下载:http://www.csse.monash.edu.au/~jwb/edict.html。它可能更适合您的需求。

答案 1 :(得分:0)

您的问题可以通过正则表达式解决。这个可能的解决方案迭代entries以产生一个哈希数组:

dictionary = entries.map do |entry|
  entry.scan(/(.*) \[(.*)\] \/(.*)\//).map do |(headword, kana, definition)|
    { headword: headword, kana: kana, definition: definition }
  end
end

这非常简单:以标准格式扫描每个条目三个部分,并通过将数组中的变量提取到新名称中将这些匹配映射到哈希值。如果有一种比这更简单或更清晰的方法来解决问题,那么你应该使用它,否则我推荐这样的东西。

注意:由于在数据中使用了外部编码,除非您更改正则表达式引擎的编码,否则这可能无效。