如何从HTML文件(Ruby)转换的txt文件创建数组?
我正在努力完成任务的第一项任务: 获得5封常规电子邮件和5封预付费欺诈电子邮件(也称垃圾邮件)。将它们全部转换为文本文件,然后将每个文件转换为一个单词数组(此处拆分可能会有所帮助)。然后使用一组正则表达式搜索单词数组,查找关键字,以分类哪些文件是垃圾邮件或不是垃圾邮件。如果你想变得更花哨,你可以给每个数组一个10分的垃圾邮件分数如何从HTML文件(Ruby)转换的txt文件创建数组?,ruby,arrays,file,text,split,Ruby,Arrays,File,Text,Split,我正在努力完成任务的第一项任务: 获得5封常规电子邮件和5封预付费欺诈电子邮件(也称垃圾邮件)。将它们全部转换为文本文件,然后将每个文件转换为一个单词数组(此处拆分可能会有所帮助)。然后使用一组正则表达式搜索单词数组,查找关键字,以分类哪些文件是垃圾邮件或不是垃圾邮件。如果你想变得更花哨,你可以给每个数组一个10分的垃圾邮件分数 打开HTML页面并读取文件 从文件中删除脚本、链接等 单独拥有正文/段落 打开文本文件(文件2)并写入(UTF-8) 从HTML文档(文件1)传递内容 现在将文本文件(
require 'nokogiri'
file = File.open("EMAILS/REG/Membership.htm", "r")
doc = Nokogiri::HTML(file)
#What ever is passed from elements to the newFile is being put into the new array however the euro sign doesn't appear correctly
elements = doc.xpath("/html/body//p").text
#puts elements
newFile = File.open("test1.txt", "w")
newFile.write(elements)
newFile.close()
#I want to open the file again and print the lines to the screen
#
array_of_words = {}
puts "\n\tRetrieving test1.txt...\n\n"
File.open("test1.txt", "r:UTF-8").each_line do |line|
words = line.split(' ')
words.each do |word|
puts "#{word}"
#array_of_words[word] = gets.chomp.split(' ')
end
end
编辑:在这里我编辑了文件,但是,我无法检索数组中欧元符号的UTF-8编码(请参阅)
需要“nokogiri”
doc=Nokogiri::HTML(File.open(“EMAILS/REG/Membership.htm”,“r:UTF-8”))
#从元素传递到新文件的内容将被放入新文件中
#但是,欧元符号显示不正确
elements=doc.xpath(“//p”).text
#放置元素
File.write(“test1.txt”,元素)
放置“\n\t正在尝试test1.txt…\n\n”
#我想再次打开文件并将行打印到屏幕上
#
word_array=array.new
File.read(“test1.txt”)。每行|
行。拆分(“”)。每个do |字|
放入“#{word}”
你让事情变得更难了。您已经在elements
中有了段落文本,因此在写入后无需阅读test1.txt
。然后使用不带参数的String#split
对所有空格进行分割。因为这是一项作业,所以我不会尝试回答您应该如何进行分割;你应该自己解决
我要做的是向您展示您应该如何写下您已经完成的内容,并为您指出一个方向:
require 'nokogiri'
doc = Nokogiri::HTML(File.read("EMAILS/REG/Membership.htm"))
# What ever is passed from elements to the newFile is being put into the new
# array however the euro sign doesn't appear correctly
elements = doc.xpath("//p").text
File.write("test1.txt", elements)
print "\n\tRetrieving test1.txt...\n\n"
# I want to open the file again and print the lines to the screen
word_hash = {}
File.open("test1.txt", "r:UTF-8").each_line do |line|
line.split(' ').each do |word|
puts "#{word}"
#word_hash[word] = gets.chomp.split(' ')
end
end
Ruby的许多IO方法和文件继承方法都可以利用块,当块退出时,块会自动关闭流。使用该功能,因为在整个应用程序运行期间保持文件处于打开状态并不好
array\u of_words={}
没有定义数组,它是一个散列
#单词数组[word]=get.chomp.split(“”)
不起作用,因为get
要从哪里读取。默认情况下,它是STDIN,即控制台,即键盘。此时您已经有了word
,所以请使用它
但是想想看,你基本上是在为一个。您需要计算单词出现的次数,因此仅将单词分配给哈希值并不能得到您想要知道的内容,您需要知道特定单词被看到的次数。Stack Overflow回答了很多关于如何计算在字符串中找到的单词数量的问题,所以请搜索这些问题。我还查看了单词的频率。我实际上有3个独立的文件。像这样的词的频率?对你需要做的事情有点复杂,在这一点上对你来说太高级了,但它与单词时态和同义词以及如何找到单词的词根有关。单数/复数拼写可能会扭曲/愚弄单词的出现次数,因此为了准确性,您需要能够解决这些差异。在问题1中,“获取一些文本文件”意味着它的简单版本,比如手工获取(如果你想,你可以将它们加载或刮取);但简单的解决方案是将它们直接在程序中表示为字符串,然后处理它们。“啊。我刚刚在我们在线资源的新闻部分从讲师那里找到了这条评论…“第一步:阅读所有说明。”这是新闻论坛中除说明之外的一条附加说明。我希望他在最初的指示中说了这句话。但我仍然要处理这个问题,而不是将字符串放在文件中。
require 'nokogiri'
doc = Nokogiri::HTML(File.read("EMAILS/REG/Membership.htm"))
# What ever is passed from elements to the newFile is being put into the new
# array however the euro sign doesn't appear correctly
elements = doc.xpath("//p").text
File.write("test1.txt", elements)
print "\n\tRetrieving test1.txt...\n\n"
# I want to open the file again and print the lines to the screen
word_hash = {}
File.open("test1.txt", "r:UTF-8").each_line do |line|
line.split(' ').each do |word|
puts "#{word}"
#word_hash[word] = gets.chomp.split(' ')
end
end