python - 如何将文本变成嵌套列表

标签 python recursion nested-lists

我正在尝试将文本输入转换为保留其结构的嵌套列表。目前我有一个函数,它接受文本和所需的“深度”并输出该深度的嵌套列表,在每个换行符、句子或单词处打破文本。

def text_split(text, depth):
    depth_list = [' ', '.', '\n']
    if isinstance(text, str):
        text = text.strip('. ')
        text = text.split(depth_list[depth])
    if depth >= 0:
        depth -= 1
        for ix, item in enumerate(text):
                item = item.strip('. ')
                text[ix] = text_split(item, depth)
    return text

这需要文本,例如

text1 = """acabei de ler um livro. um diário.
mas a liberdade sempre chamou fountaine mais forte.
a cada viagem fountaine ía mais longe. aprendeu a andar de bicicleta e viajou o sul da frança.

esse é o tipo de pergunta feita na última edição do prêmio Loebner, em que participantes precisam responder à algumas questões feitas pelo júri.

o que tem de especial nessa competição é que ela não é para humanos, mas sim para robôs. o prêmio Loebner é uma implementação do teste de Turing.

"""

进入

[   [[['acabei'], ['de'], ['ler'], ['um'], ['livro']], [['um'], ['diário']]],
[   [   ['mas'],
        ['a'],
        ['liberdade'],
        ['sempre'],
        ['chamou'],
        ['fountaine'],
        ['mais'],
        ['forte']]],
[   [   ['a'],
        ['cada'],
        ['viagem'],
        ['fountaine'],
        ['ía'],
        ['mais'],
        ['longe']],
    [   ['aprendeu'],
        ['a'],
        ['andar'],
        ['de'],
        ['bicicleta'],
        ['e'],
        ['viajou'],
        ['o'],
        ['sul'],
        ['da'],
        ['frança']]],
[[['']]], ... ]]]]

现在这可能不是最好或最优雅的方式,并且它有一些问题,例如 [[['']]]出现在 \n 之后被分割(可以通过使用 .splitlines() 来解决,但我找不到在递归函数中调用此方法的好方法)。

有什么更好的方法可以做到这一点?我应该使用嵌套列表吗? (我计划稍后对此进行迭代)。感谢您的建议!

最佳答案

这是我能想到的最好的满足您要求的方案:

text = []
for line in text1.split('\n'):
  sentences = []
  for sentence in line.split('.'):
    words = []
    for word in sentence.split(' '):
      if len(word.strip()) > 0: # make sure we are adding something
        words.append(word.strip())
    if len(words) > 0:
      sentences.append(words)
  if len(sentences) > 0:
    text.append(sentences)

使用此方法,我们可以为数组提供明确定义的结构,并且可以确保没有任何空白或空数组。另外,在这里使用递归并不是一件好事,因为文本应该具有清晰的结构。您知道递归深度不会超过 3 层。

此外,如果您想要递归版本,您应该在问题中说明并明确要求。

关于python - 如何将文本变成嵌套列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42989799/

相关文章:

python - 列表列表更改意外地反射(reflect)在子列表中

python - 找到 large_files 但输出意外结果

python - 如何使用 Python 'in' 运算符检查我的列表/元组是否包含每个整数 0、1、2?

python - 有效地将平面列表分割为多级嵌套列表

c - 递归求数组最小值的方法

c - 尝试递归地通过二叉搜索树添加节点

r - 取消列出嵌套列表的倒数第二个列表

python - 使用 Django session 存储变量

python - 插入排序两种不同实现方式的效率分析

recursion - Paul Graham 在他的 Bel 引用文献中如何解决 mac 的循环性?