Создавайте список каждый раз, когда я сталкиваюсь с определенным словом в строке - PullRequest
0 голосов
/ 18 ноября 2018

Моя проблема в том, что я хотел написать код, который сделал это:

    input => str_of_words = '<post>30blueyellow<post>2skyearth<post>5summerwinter'
    output => post30 = ["blue","yellow"]
              post2 = ["sky","earth"]
              post5 = ["summer", "winter"]

Сначала я подумал, что могу сделать что-то вроде

     if "<post>" in str_of_words:
         occurrence = str_of_words.count("<post>")
         #and from there I had no idea how to continue coding it

Так что я чувствую, что могу спроситьесли бы кто-нибудь знал некоторые хитрости, чтобы сделать это

Ответы [ 2 ]

0 голосов
/ 19 ноября 2018

Вы можете использовать модуль nltk:

import re
import nltk
nltk.download('words')
from nltk.corpus import words

def split(a):
    for i in range(len(a)):
        if a[:i] in words.words() and a[i:] in words.words():
            return [a[:i],a[i:]]


str_of_words = '<post>30blueyellow<post>2skyearth<post>5summerwinter'

post = {i:split(j) for i,j in dict(re.findall(r'post>(\d+)(\w+)',str_of_words)).items()}

post['30']
 ['blue', 'yellow']

post['5']
 ['summer', 'winter']

post['2']
 ['sky', 'earth']
0 голосов
/ 18 ноября 2018

это может привести к началу работы:

import re

str_of_words = '<post>30blueyellow<post>2skyearth<post>5summerwinter'

posts = {}
lst = str_of_words.split('<post>')
for item in lst:
    match = re.match('(\d+)(\D+)', item)
    if not match:
        continue
    posts[int(match.group(1))] = match.group(2)

print(posts)

он печатает:

{30: 'blueyellow', 2: 'skyearth', 5: 'summerwinter'}

так posts[30] = 'blueyellow'.

модуль re очень полезен, когда дело доходит до отделения чисел (\d) от нечисловых (\D).

Я не знаю, по каким правилам вы хотели бы иметь возможность разбиватьслова.у вас есть список слов, которые могут появиться?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...