Python代码中的全字符串解析

2024-09-30 22:28:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要对葡萄牙语字符串执行词干分析。为此,我使用nltk.word_标记化()函数a,然后分别对每个单词进行词干分析。之后,我重建了字符串。它是有效的,但表现不好。我怎样才能更快?字符串长度约为200万字。在

    tokenAux=""
    tokens = nltk.word_tokenize(portugueseString)
        for token in tokens:
            tokenAux = token
            tokenAux = stemmer.stem(token)    
            textAux = textAux + " "+ tokenAux
    print(textAux)

抱歉,英语不好,谢谢!在


Tags: 函数字符串in标记tokenfor单词word
3条回答

string是不可变的,因此,如果字符串很长,则不是每次都更新字符串的好做法。link here解释了连接字符串的各种方法,并显示了性能分析。由于迭代只进行一次,所以最好选择generator expression而不是{}。有关详细信息,请查看discussion here 。在这种情况下,将generator expressionjoin一起使用可能会有帮助:

my_text用于长字符串:len(my_text) -> 444399

使用timeit进行比较:

%%timeit
tokenAux=""
textAux=""
tokens = nltk.word_tokenize(my_text)
for token in tokens:
    tokenAux = token
    tokenAux = stemmer.stem(token)    
    textAux = textAux + " "+ tokenAux

结果:

^{pr2}$

generator expressionjoin一起使用:

%%timeit 
' '.join(stemmer.stem(token) for token in nltk.word_tokenize(my_text))

结果:

1 loop, best of 3: 2.93 s per loop

您可以将字符串作为文本文件读入,然后执行必要的操作,使用PySpark对每个单词执行词干。这将允许您并行执行操作。在

您也可以使用multiprocessing module。在

字符串对象在Python中是不可变的。查看您的代码:

textAux = ""
for token in tokens:
    # something important ...
    textAux = textAux + " "+ tokenAux

每次在循环中创建新字符串并将其分配给textAux变量时。这是没有效率的。在

我将把tokenAux元素存储在一个列表中,最后将它们连接起来。参见示例:

^{pr2}$

比较性能并与我们分享:)

有用的链接:

相关问题 更多 >