【问题标题】:how to calculate the number of unique words just in a part of a file如何计算文件一部分中唯一单词的数量
【发布时间】:2016-10-30 19:48:48
【问题描述】:

我有一个波斯语文件(一个波斯语句子,一个“tab”,然后是一个波斯语单词,又是一个“tab”,然后是一个英语单词)。我必须计算波斯语句子中唯一单词的数量,而不是制表符后的波斯语和英语单词。代码如下:

from hazm import*

file = "F.txt"
def WordsProbs (file):
    words = set()
    with open (file, encoding = "utf-8") as f1:
        normalizer = Normalizer()
        for line in f1:
            tmp = line.strip().split("\t")
            words.update(set(normalizer.normalize(tmp[0].split())))
    print(len(words), "unique words")
    print (words)

要访问句子,我必须用“\t”分隔每一行。要访问句子的每个单词,我必须拆分 tmp[0]。问题是,当我运行代码时,会发生以下错误。这是因为 tmp[0] 之后的分裂。但是如果我在 tmp[0] 之后省略这个拆分,它只会计算字母而不是唯一的单词。我该如何解决? (是否有另一种方法可以编写此代码来计算唯一词?)。

错误: 回溯(最近一次通话最后): 文件“C:\Users\yasini\Desktop\16.py”,第 15 行,在 WordsProbs(文件) WordsProbs 中的文件“C:\Users\yasini\Desktop\16.py”,第 10 行 words.update(set(normalizer.normalize(tmp[0].split()))) 文件“C:\Python34\lib\site-packages\hazm\Normalizer.py”,第 46 行,标准化 文本 = self.character_refinement(文本) 文件“C:\Python34\lib\site-packages\hazm\Normalizer.py”,第 65 行,在 character_refinement 中 text = text.translate(self.translations) AttributeError: 'list' 对象没有属性 'translate'

示例文件: https://www.dropbox.com/s/r88hglemg7aot0w/F.txt?dl=0

【问题讨论】:

    标签: python-3.x nlp


    【解决方案1】:

    问题在于 hazm.Normalizer.normalize 将空格分隔的字符串作为参数而不是列表。您可以在“使用”标题下看到一个示例 here

    从参数中删除 .split() 到您的规范化函数,以便

    words.update(set(normalizer.normalize(tmp[0].split())))
    

    变成

    words.update(set(normalizer.normalize(tmp[0])))
    

    你应该很高兴。

    【讨论】:

    • 我之前试过。如果我忽略它,它会计算字母而不是单词。
    【解决方案2】:

    我自己找到的。

    from hazm import*
    
    file = "F.txt"
    def WordsProbs (file):
        words = []
        mergelist = []
        with open (file, encoding = "utf-8") as f1:
            normalizer = Normalizer()
            for line in f1:
                line = normalizer.normalize(line)
                tmp = line.strip().split("\t")
                words = tmp[0].split()
                #print(len(words), "unique words")
                #print (words)
                for i in words:
                    mergelist.append(i)
                    uniq = set(mergelist)
                    uniqueWords = len(uniq)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-06-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-28
      • 1970-01-01
      • 2012-08-07
      相关资源
      最近更新 更多