通过重建单词标记返回源文本

dly7yett  于 2021-08-20  发布在  Java
关注(0)|答案(1)|浏览(229)

第一次在so上发布,感谢您的帮助!
我正在尝试从word标记中重新创建一些源文本。
根据下面的代码,我试图返回“foobar!”。如果有更多的句子,那么应该将它们添加到返回的字符串中。空格应该自然添加,以便单词之间有空格,而不是标点符号和单词之间有空格。

{[
    {
id: 1,
tags: [
{
word: "Foo",
order: 0,
is_punctuation: false
},
{
word: "Bar",
order: 1,
is_punctuation: false
},
{
word: "!",
order: 2,
is_punctuation: true
}
]
},
...
}]
jogvjijk

jogvjijk1#

我不知道如何获取数据,但如果您希望将其作为正确的json或python列表/字典,那么您可以使用 for -循环以获取所有单词,并仅在非穿孔时添加空格-如下所示

text = '''[
  {
    "id": 1,
    "tags": [
      {
        "word": "Foo",
        "order": 0,
        "is_punctuation": false
      },
      {
        "word": "Bar",
        "order": 1,
        "is_punctuation": false
      },
      {
        "word": "!",
        "order": 2,
        "is_punctuation": true
      },
      {
        "word": "Hello",
        "order": 3,
        "is_punctuation": false
      },
      {
        "word": ",",
        "order": 4,
        "is_punctuation": true
      },
      {
        "word": "World",
        "order": 5,
        "is_punctuation": false
      },
      {
        "word": "!",
        "order": 6,
        "is_punctuation": true
      }

    ]
  }
]'''

import json

data = json.loads(text)

all_items = []
for item in data[0]['tags']:
    print(item)
    if not item['is_punctuation']:
        all_items.append(' ')
    all_items.append( item['word'] )

sentence = ''.join(all_items).strip()
print(sentence)

结果:

{'word': 'Foo', 'order': 0, 'is_punctuation': False}
{'word': 'Bar', 'order': 1, 'is_punctuation': False}
{'word': '!', 'order': 2, 'is_punctuation': True}
{'word': 'Hello', 'order': 3, 'is_punctuation': False}
{'word': ',', 'order': 4, 'is_punctuation': True}
{'word': 'World', 'order': 5, 'is_punctuation': False}
{'word': '!', 'order': 6, 'is_punctuation': True}

Foo Bar! Hello, World!

但我不知道它是否有不同顺序的元素。
大概 NLTK 具有将其转换回句子的方法。

相关问题