我有一项任务要找出每个句子中的单词。
给定一个字符串,我们要将字符串分成句子,然后确定所有句子中的单词(如果有的话)。
以下是我的解决方案:
# encoding: utf-8
text = ''
File.foreach("lab2.in") do |line|
text += line
end
hash = Hash.new
text = text.gsub(/[\n,]/,'').split(/[!.?]/)
number = 0
text.each do |sen|
number += 1
words = sen.split(/ /)
words.each do |word|
if hash[word]
hash[word] += "#{number}"
else
hash[word] = "#{number}"
end
end
end
flag = false
needle = ''
count = text.length
for i in 1..count
needle += "#{i}"
end
hash.each do |word|
if word[1].squeeze == needle
puts "this word is \"#{word[0]}\""
flag = true
end
end
if !flag
puts "There no such word"
end
如何才能更漂亮地解决这个问题?我对ruby库方法感兴趣。一个简单的解决方案,就像我已经知道的一个字符一个字符的循环。
例如,输入如下:
lorem ipsum dolor and another lorem! sit amet lorem? and another lorem.
输出为:
this word is "lorem"
最佳答案
你可以这样做(我稍微修改了一下你的示例):
str = "a lorem ipsum lorem dolor sit amet. a tut toje est lorem! a i tuta toje lorem?"
str.split(/[.!?]/).map(&:split).reduce(:&)
#=> ["a", "lorem"]
我们有:
d = str.split(/[.!?]/)
#=> ["a lorem ipsum lorem dolor sit amet",
# " a tut toje est lorem",
# " a i tuta toje lorem"]
e = d.map(&:split)
#=> [["a", "lorem", "ipsum", "lorem", "dolor", "sit", "amet"],
# ["a", "tut", "toje", "est", "lorem"],
# ["a", "i", "tuta", "toje", "lorem"]]
e.reduce(:&)
#=> ["a", "lorem"]
要使其不区分大小写,请将
str.split...
更改为str.downcase.split...
。关于ruby - 使用Ruby查找句子中的常用词,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29133099/