如何从HTML文件(Ruby)转换的txt文件创建数组?

如何从HTML文件(Ruby)转换的txt文件创建数组?,ruby,arrays,file,text,split,Ruby,Arrays,File,Text,Split,我正在努力完成任务的第一项任务: 获得5封常规电子邮件和5封预付费欺诈电子邮件(也称垃圾邮件)。将它们全部转换为文本文件,然后将每个文件转换为一个单词数组(此处拆分可能会有所帮助)。然后使用一组正则表达式搜索单词数组,查找关键字,以分类哪些文件是垃圾邮件或不是垃圾邮件。如果你想变得更花哨,你可以给每个数组一个10分的垃圾邮件分数 打开HTML页面并读取文件 从文件中删除脚本、链接等 单独拥有正文/段落 打开文本文件(文件2)并写入(UTF-8) 从HTML文档(文件1)传递内容 现在将文本文件(

我正在努力完成任务的第一项任务:

获得5封常规电子邮件和5封预付费欺诈电子邮件(也称垃圾邮件)。将它们全部转换为文本文件,然后将每个文件转换为一个单词数组(此处拆分可能会有所帮助)。然后使用一组正则表达式搜索单词数组,查找关键字,以分类哪些文件是垃圾邮件或不是垃圾邮件。如果你想变得更花哨,你可以给每个数组一个10分的垃圾邮件分数

  • 打开HTML页面并读取文件
  • 从文件中删除脚本、链接等
  • 单独拥有正文/段落
  • 打开文本文件(文件2)并写入(UTF-8)
  • 从HTML文档(文件1)传递内容
  • 现在将文本文件(file2)中的单词放入数组中,然后拆分
  • 通过数组查找任何被认为是垃圾邮件的单词,并将消息打印到屏幕上,说明该电子邮件是否为垃圾邮件
  • 这是我的密码:

    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