Разделить список строк на несколько условий - PullRequest
0 голосов
/ 25 марта 2020

У меня есть несколько предложений, которые я хотел бы разделить на определенные c слова (например, и). Однако при разделении предложений иногда есть две или более комбинаций слова, на которые я хотел бы разделить предложение.

Примеры предложений:

['i', 'am', 'just', 'hoping', 'for', 'strength', 'and', 'guidance', 'because', 'i', 'have', 'no', 'idea', 'why']
['maybe', 'that', 'is', 'why', 'he', 'does', 'not', 'come', 'home', 'and', 'tell', 'you', 'how', 'good', 'his', 'day', 'at', 'work', 'was', 'because', 'he', 'is', 'been', 'told', 'not', 'to', 'talk']

, поэтому я написал некоторый код для разбиения предложения:

split_on_word = []
no_splitting = []
indexPosList = [ i for i in range(len(kth)) if kth[i] == 'and'] # check if word is in sentence
for e in example: 
  kth = e.split() # split strings into list so it looks like example sentence
  for n in indexPosList:
    if n > 4: # only split when the word's position is 4 or more 
      h = e.split("and")
      for i in h: 
        split_on_word.append(i)# append split sentences 
    else:
      no_splitting.append(kth) #append sentences that don't need to be split

Однако вы можете видеть, что при использовании этого кода более однажды (например: заменить слово, на которое нужно разделить другое), я создам дубликаты или частично дублирую предложения, которые добавляю в новый список.

Есть ли способ проверить наличие нескольких условий, чтобы, если предложение содержало обе или другие комбинации, я разбил предложение на одну go?

Результат из примеров должен выглядеть следующим образом:

['i', 'am', 'just', 'hoping', 'for', 'strength']
['guidance', 'because']
['i', 'have', 'no', 'idea', 'why']

['maybe', 'that', 'is', 'why', 'he', 'does', 'not', 'come', 'home']
[ 'tell', 'you', 'how', 'good', 'his', 'day', 'at', 'work', 'was']
['he', 'is', 'been', 'told', 'not', 'to', 'talk']

1 Ответ

2 голосов
/ 25 марта 2020

Вы можете использовать itertools.groupby с функцией, которая проверяет, является ли слово разделенным словом:

In [11]: split_words = {'and', 'because'}                                                     

In [12]: [list(g) for k, g in it.groupby(example, key=lambda x: x not in split_words) if k]   
Out[12]: 
[['maybe', 'that', 'is', 'why', 'he', 'does', 'not', 'come', 'home'],
 ['tell', 'you', 'how', 'good', 'his', 'day', 'at', 'work', 'was'],
 ['he', 'is', 'been', 'told', 'not', 'to', 'talk']]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...