首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过确保单词的完整性,将文本分割成块

通过确保单词的完整性,将文本分割成块
EN

Stack Overflow用户
提问于 2021-08-04 14:21:38
回答 3查看 502关注 0票数 1

我有一堆文本样本。每个样本有不同的长度,但它们都由>200个字符组成。我需要把每个样本分成大约50个chara的长度子串。为此,我发现了以下方法:

代码语言:javascript
复制
import re

def chunkstring(string, length):
    return re.findall('.{%d}' % length, string)

然而,它通过分裂单词来分割文本。例如,短语“我有<...> icecream. <...>”可以分为"I into <...> icec“和"ream. <...>”。

这是示例文本:

本文提出了一种通过使用一种名为StarGAN的生成对抗性网络的变体来实现非并行多到多语音转换的方法。

我得到了这个结果:

代码语言:javascript
复制
['This paper proposes a method that allows non-paral',
 'lel many-to-many voice conversion by using a varia',
 'nt of a generative adversarial network called Star']

但理想情况下,我希望得到类似于这样的结果:

代码语言:javascript
复制
['This paper proposes a method that allows non-parallel',
 'many-to-many voice conversion by using a variant',
 'of a generative adversarial network called StarGAN.']

如何调整上述给定的代码以获得所需的结果?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2021-08-04 14:42:02

对于我来说,这听起来像textwrap内置模块的任务,例如使用您的数据。

代码语言:javascript
复制
import textwrap
text = "This paper proposes a method that allows non-parallel many-to-many voice conversion by using a variant of a generative adversarial network called StarGAN."
print(textwrap.fill(text,55))

输出

代码语言:javascript
复制
This paper proposes a method that allows non-parallel
many-to-many voice conversion by using a variant of a
generative adversarial network called StarGAN.

你可能需要一些试验才能得到最适合你需求的价值。如果需要list of str的话,请使用textwrap.wrap,即textwrap.wrap(text,55)

票数 2
EN

Stack Overflow用户

发布于 2021-08-04 14:32:11

您可以使用.{0,50}\S*来继续匹配最终的非空间字符(\S)。

我将0指定为低界,因为否则可能会丢失最后一个子字符串。

参见演示这里

编辑:

为了排除尾随空块,请使用.{1,50}\S*,以强制它至少匹配一个字符。

如果您还想自动删除边框,请使用\s*(.{1,50}\S*)

票数 3
EN

Stack Overflow用户

发布于 2022-09-25 14:32:33

代码语言:javascript
复制
def nearestDelimiter(txt,  cur):
    delimiters = " ;:.!?-—"          
    if(txt[cur] in delimiters) :          
          return cur
    else:
        i=cur
        while ( i>=0 ):
            if (txt[i] in delimiters) :                    
                        return i
            i=i-1
    return 0


def splitText(sentence,chunkLength):
     cursor = 0  
     curlng = chunkLength
     lst = []
     while (curlng < len(sentence)):
         curlng = nearestDelimiter(sentence, curlng)       
         substr = (sentence[cursor : curlng]).strip()
         cursor = curlng        
         curlng = (cursor+chunkLength) if (cursor+chunkLength<len(sentence)) else len(sentence)            
         lst.append(substr)
     lst.append((sentence[cursor : curlng]).strip())
     return lst


txt = "This paper proposes a method that allows non-parallel many-to-many voice conversion by using a variant of a generative adversarial network called StarGAN."

cvv = splitText(txt,50)
for cv in cvv:
    print(cv)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68652956

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档