Python - разбить и перечислить строку, проверить, находятся ли 2 слова в пределах определенного расстояния в строке - PullRequest
0 голосов
/ 17 июня 2019

Я работаю над программой ag, которая проверит определенные закономерности в названии исследования, чтобы определить, может ли заголовок быть актуальным.Как правило, будет уместно, если слова «доступ» и «уход» находятся в пределах 4 слов друг от друга.Могут быть такие фразы, как «доступ к лечению», «доступ к пациенту» или «доступ к лечению диабета».

Сейчас я перечислил и разбил каждую строку и отфильтровал строки, которые имеют«доступ» и «забота» в них, а также число, но я изо всех сил пытался создать двоичную переменную «да / нет», если они находятся в пределах 4 слов друг от друга.Например:

string = "Обеспечение доступа к медицинской помощи имеет важное значение."
релевантно = 'да'

string = "Обеспечение доступа к билетам на бейсбол важно, но, честно говоря, мне все равно."
релевантно = 'нет'

Буду признателен за любые идеи, как это сделать.Вот что у меня есть:

  sentence = 'A priority area for this company is access to medical care 
  and how we address it.'
  sentence = sentence.lower()
  sentence = sentence.split()
  for i, j in enumerate(sentence):

      if 'access' in j:
          x = 'yes'
      else:
          x = 'no'

      if 'care' in j:
          y = 'yes'
      else:
          y = 'no'   

      if x == 'yes' or y == 'yes':
          print(i, j, x, y)

Ответы [ 4 ]

2 голосов
/ 17 июня 2019

Легко сделайте это, избегая всех этих петель:

sentence = 'A priority area for this company is access to medical care and how we address it.'
sentence = sentence.lower().split()

### if both in list
if 'access' in sentence and 'care' in sentence :
    ### take indexes
    access_position = sentence.index('access')
    care_position = sentence.index('care')
    ### check the distance between indexes
    if abs( access_position - care_position ) < 4  :
        print("found access and care in less than 4 words")

### result:
found access and care in less than 4 words 
1 голос
/ 19 июня 2019

Если в предложении имеется более одного вхождения «уход» или «доступ», все ответы до сих пор будут рассматривать только один из них, который иногда не сможет обнаружить совпадение.Вместо этого вам необходимо учитывать все вхождения каждого слова:

sentence = "Access to tickets and access to care"
sentence = sentence.lower().split()

access_positions = [i for (i, word) in enumerate(sentence) if word == 'access']
care_positions = [i for (i, word) in enumerate(sentence) if word == 'care']

sentence_is_relevant = any(
    abs(access_i - care_i) <= 4
    for access_i in access_positions
    for care_i in care_positions
)
print("sentence_is_relevant =", sentence_is_relevant)
1 голос
/ 17 июня 2019

Вы можете сделать:

access = sentence.index("access")
care = sentence.index("care")

if abs(care - access) <= 4:
    print("Less than or equal to 4")
else:
    print("More than 4")

Конечно, измените приведенный выше код в соответствии с вашей конкретной ситуацией.

1 голос
/ 17 июня 2019

Вы можете достичь индекса, чтобы проверить его с помощью индексов. Измените свой код на:

sentence = 'A priority area for this company is access to medical care and how we address it.'

sentence = sentence.lower()
sentence = sentence.split()
access_index = 0
care_index = 0
for i, j in enumerate(sentence):

      if 'access' in j:
          access_index= i


      if 'care' in j:
          care_index = i

if access_index - care_index < 4:
          print ("Less than 4 words")
else:
          print ("More than 4 words")
...