我想制作应用程序,将所需的网页日语词汇转换为英语。 但我想要开始形式只是简单地显示网页内联欲望的网址,如Google翻译。(See here)
我使用下面的代码从所需的网址获取了html数据, 现在我想在html中同时替换基于数据库的数据。
def submit
require 'open-uri'
charset = nil
@html = open(params[:url]) do |f|
charset = f.charset
f.read
end
end
数据库已撤消,但我将包含应切换的日语词汇,以及应切换而不是日语词汇的英语词汇。
有任何想法或方法吗? 另外,我刚刚开始学习Ruby on Rails,所以如果你用一些例子或详细解释来解释它会很好:)
我只想根据数据库中的项目替换文本中的特定单词,我不想要多语言。
编辑:
例如,我从所需的网页上获得了以下html。
<html>
<head>
</head>
<body>
<p>I want to switch "aaa" this and "ccc"</p>
</body>
</html>
假设我想切换(替换)&#34; aaa&#34; to&#34; bbb&#34;,&#34; ccc&#34;到&#34; ddd&#34;。 应该切换并切换而不是前一个单词的单词在数据库中。(目标:&#34; aaa&#34;,&#34; ccc&#34; Switch:&#34; bbb&#34;,&#34 ; DDD&#34)
因为这个html是我用open-uri得到的,所以我不能实现像#{target}
这样的代码。
答案 0 :(得分:1)
根据code in this answer和this answer工作,您可以这样做:
replacements = {'aaa' => 'ccc', 'bbb' => 'ddd' }
regex = Regexp.new(replacements.keys.map { |x| Regexp.escape(x) }.join('|'))
doc = Nokogiri::HTML::DocumentFragment.parse(html)
doc.traverse do |x|
if x.text?
x.content = x.content.gsub(regex, replacements)
end
end
我也测试过:
replacements = {'こんにちは' => 'Good day', 'bbb' => 'ddd' }
regex = Regexp.new(replacements.keys.map { |x| Regexp.escape(x) }.join('|'))
"こんにちは Mr bbb".gsub(regex, replacements)
给出了预期:
Good day Mr ddd
您可能还想使用:
regex = Regexp.new(replacements.keys.map { |x| '\\b'+Regexp.escape(x)+'\\b' }.join('|'))
防止“aaardvark”变成“cccrdvark”。