看起来“执行此操作”需要对字符串列表进行一些regexp替换。Python在这个领域提供了比R更强大的功能。下面是我如何应用你的rmRepeatedPatterns替换,使用列表理解:pCorp = [ re.sub(r'\b(\S+?)\1\S*\b', '', line) for line in pCorp ]
如果希望将其包装在函数中:
^{pr2}$
Python还有一个map运算符,可用于函数:pCorp = map(rmRepeatedPatterns, pCorp)
但是列表理解更强大、更具表现力和灵活性;正如您所见,您可以应用简单的替换而不必将它们埋入函数中。在
附加说明:如果您的数据集很大,您还可以学习如何使用生成器而不是列表理解;实际上,它们允许您根据需要生成元素,而不是创建大量中间列表。
Python有一些操作符,比如map,但是如果你要做很多矩阵操作,你应该阅读numpy,它提供了一个更像R的体验。
编辑:在再次查看了示例R脚本之后,我将如何完成剩下的清理工作,例如,获取行列表,转换为小写,删除标点和数字(特别是:不是英文字母的所有内容),并删除非索引字。在# Lower-case, split into words, discard everything that's not a letter
tok_lines = [ re.split(r"[^a-z]+", line.lower()) for line in pCorp ]
# tok_lines is now a list of lists of words
stopwordlist = nltk.corpus.stopwords.words("english") # or any other list
stopwords = set(w.lower() for w in stopwordlist)
cleantoks = [ [ t for t in line if t not in stopwords ]
for line in tok_lines ]
我不建议使用question you link to中提出的任何一种解决方案。在集合中查找事物比在大列表中查找要快得多,我将使用理解来代替filter()。在
|