Обработка текста, чтобы получить условие типа if from string - PullRequest
0 голосов
/ 07 мая 2019

Прежде всего, я сожалею о странном заголовке вопроса. Не удалось выразить это в одной строке.

Итак, постановка задачи:

Если мне дают следующую строку -

"('James Gosling'/jamesgosling/james gosling) , ('SUN Microsystem'/sunmicrosystem), keyword"

Я должен разобрать это как

list1 = ["'James Gosling'", 'jamesgosling', 'jame gosling']

list2 = ["'SUN Microsystem'", 'sunmicrosystem']

list3 = [ list1, list2, keyword]

Так что, если я введу James Gosling Sun Microsystem keyword, это скажет мне, что я ввел 100% правильно

И если я введу J Gosling Sun Microsystem keyword, то должно быть сказано, что я только 66,66% правильно.

Это то, что я пробовал до сих пор.

import re

def main():
    print("starting")
    sentence = "('James Gosling'/jamesgosling/jame gosling) , ('SUN Microsystem'/sunmicrosystem), keyword"
    splited = sentence.split(",")
    number_of_primary_keywords = len(splited)
    #print(number_of_primary_keywords, "primary keywords length")
    number_of_brackets = 0
    inside_quotes = ''
    inside_quotes_1 = ''
    inside_brackets = ''
    for n in range(len(splited)):
        #print(len(re.findall('\w+', splited[n])), "length of splitted")
        inside_brackets = splited[n][splited[n].find("(") + 1: splited[n].find(")")]
        synonyms = inside_brackets.split("/")
        for x in range(len(synonyms)):
            try:
                inside_quotes_1 = synonyms[x][synonyms[x].find("\"") + 1: synonyms[n].find("\"")]
                print(inside_quotes_1)
            except:
                pass
            try:
                inside_quotes = synonyms[x][synonyms[x].find("'") + 1: synonyms[n].find("'")]
                print(inside_quotes)
            except:
                pass
            #print(synonyms[x])
        number_of_brackets += 1

    print(number_of_brackets)


if __name__ == '__main__':
    main()

Вывод выглядит следующим образом

'James Gosling

jamesgoslin

jame goslin

'SUN Microsystem
SUN Microsystem
sunmicrosyste
sunmicrosyste
3

Как видите, последние буквы некоторых слов отсутствуют.

Итак, если вы прочитаете это далеко, я надеюсь, что вы можете помочь мне получить ожидаемый результат

1 Ответ

0 голосов
/ 07 мая 2019

К сожалению, в вашем коде есть логическая проблема, которую я не смог понять, однако там могут быть следующие строки:

inside_quotes_1 = synonyms[x][synonyms[x].find("\"") + 1: synonyms[n].find("\"")]

inside_quotes = synonyms[x][synonyms[x].find("'") + 1: synonyms[n].find("'")]

, которые, кстати, вы можете просто использовать:

inside_quotes_1 = synonyms[x][synonyms[x].find("\x22") + 1: synonyms[n].find("\x22")]

inside_quotes = synonyms[x][synonyms[x].find("\x27") + 1: synonyms[n].find("\x27")]

Кроме этого, вы, кажется, хотите извлечь слова с их индексами, которые вы можете извлечь из них, используя простое выражение :

(\w+)

Затем вы можете захотетьнайти простой способ найти индексы, где слова.Затем свяжите каждое слово с желаемыми индексами.

enter image description here

Пример теста

# -*- coding: UTF-8 -*-
import re

string = "('James Gosling'/jamesgosling/james gosling) , ('SUN Microsystem'/sunmicrosystem), keyword"
expression = r'(\w+)'
match = re.search(expression, string)
if match:
    print("YAAAY! \"" + match.group(1) + "\" is a match ??? ")
else: 
    print('? Sorry! No matches! Something is not right! Call 911 ?')
...