如何从文本文件中提取数字并将它们相乘?

时间:2015-12-13 16:37:31

标签: python nlp

我有一个文本文件,其中包含800个单词,每个单词前面都有一个数字。 (每个单词及其编号都在一个新行中。这意味着文件有800行)我必须找到数字,然后将它们相乘。因为乘以很多浮点值等于零,我必须使用对数来防止下溢,但我不知道如何。 这是公式: cNB = argmaxlogP(c)+logP(x | c)

此代码不会打印任何内容。

output = []

with open('c:/python34/probEjtema.txt', encoding="utf-8") as f:
    w, h  = map(int, f.readline().split())
    tmp = []
    for i, line in enumerate(f):
        if i == h:
            break
        tmp.append(map(int, line.split()[:w]))
   output.append(tmp)
   print(output) 

文件语言是波斯语。

该文件的片段:

فعالان0.0019398642095053346 محترم0.03200775945683802 اعتباري0.002909796314258002 مجموع0.0038797284190106693 حل0.016488845780795344 مشابه0.004849660523763337 مشاوران0.027158098933074686 مواد0.005819592628516004 معادل0.002909796314258002 ولي0.005819592628516004 ميزان0.026188166828322017 دبير0.0019398642095053346 دعوت0.007759456838021339 اميد0.002909796314258002

3 个答案:

答案 0 :(得分:1)

如果我理解正确,你可以按照以下方式做点什么:

result = 1
with open('c:/python34/probEjtema.txt', encoding="utf-8") as f:
    for line in f:
        word, number = line.split() #  line.split("\t") if numbers are seperated by tab
        result = result * float(number)

答案 1 :(得分:1)

您可以使用http://openlayers.org/en/v3.5.0/apidoc/ol.geom.Circle.html查找每行中的第一个数字,例如

import re

output = []
with open('c:/python34/probEjtema.txt', encoding="utf-8") as f:
    for line in f:
        match = re.search(r'\d+.?\d*', line)
        if match:
            output.append(float(match.group()))

print(output)

re.search(r'\d+.?\d*', line)查找第一个数字(每行中带.的整数或浮点数。

这是一个不错的在线正则表达式测试器:regular expressions(用于调试/测试)。

/编辑:将正则表达式更改为\d+.?\d*以捕获整数和浮点数。

答案 2 :(得分:1)

这将创建一个包含所有数字的输出列表。结果将给出最终的乘法结果。

import math
output = []
result=1
eres=0
with open('c:/python34/probEjtema.txt', encoding="utf-8") as f:
   for line in (f):
       output.append(line.split()[1])
       result *= float((line.split()[1]))
       eres += math.log10(float((line.split()[1]))) #result in log base 10
print(output)
print(result)
print eres