python 复数,python复数是什么意思
看起来你对Python很熟悉,但我还是会试着解释一些步骤。先说第一个问题。当你使用。read()读取一个多行文件(在你的例子中是words,numbers csv),你将把整个文件体读入一个大字符串。定义打开文件(f):
用open(f, r )作为a:
a=a.read() # a将等于“soc,32\nsoc,1\n .”在你的例子中
a=a.lower()
返回a
这很棒,但是当你想把结果传递给stem()的时候,它会是一个很大的字符串,而不是一个单词列表。这意味着当您在中使用for word来遍历输入时,您将遍历输入字符串的每个单个字符,并将词干分析器应用于这些单个字符。定义茎(a):
p=nltk。波特斯特默()
a=[p.stem(word) for word in a] # [s , o , c ,,, , 3 , 2 , \n ,]
返回a
这绝对不适合你的目的。我们可以做些不同的事情。我们可以将它改为以一系列行的形式读取输入文件。
我们可以自己用大字符串分解成一个列表。
我们可以一次检查和处理行列表中的每一行。
为了方便起见,我们用1。这需要将openfile(f)更改为以下内容:def openfile(f):
用open(f, r )作为a:
a=a.readlines() # a将等于 soc,32\nsoc,1\n . 在你的例子中
b=[x.lower() for x in a]
返回b
这应该给我们一个B行的列表,即[soc,32, soc,1 ,…]。所以接下来的问题是,当我们把字符串列表传递给stem()时,该如何处理它。一种方法是:定义stem(a):
p=nltk。波特斯特默()
b=[]
对于中的行:
split_line=line.split(,)#把它分开,这样我们才能接触到这个词
new _ line=str(p . stem(split _ line[0]), split _ line[1]#把它放回一起
b . append(new _ line)#将其添加到新的行列表中
返回b
这肯定是一个非常粗糙的解决方案,但输入中的所有行都应该被完全遍历,并使其不具有吸引力。这是粗略的,因为当一只优秀的羊放大时,拆分和重组字符串并不是特别快。但是,如果您对此感到满意,那么剩下的工作就是遍历新行列表并将它们写入文件。根据我的经验,写一个新文档通常更安全,但是它应该可以正常工作。def returnfile(f,a):
用open(f, w )作为d:
对于中的行:
d .写(行)
打印openfile(f)
打印词干(openfile(f))
打印returnfile(f,stem(openfile(f)))
当我有如下输入时. txtsoc,32
SOC,1
狗,8
我得到了以下标准:请输入一个文件名:input.txt
[soc,32\n , socs,1\n , dogs,8\n]
[soc,32\n , soc,1\n , dog,8\n]
没有人
Input.txt如下:soc,32
soc,1
狗,8岁
第二个关于把数字和相同的单词组合起来的问题改变了我们的解决方案。根据评论中的建议,你应该看看用字典来解决这个问题。一个更好的方法(可能更像pythonic)是遍历输入的每一行,并在处理它们时阻止它们,而不是像一个大列表那样做所有这些。如果你还在试图解决这个问题,过一会儿我会写下代码。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。