Разбор выражения Adwords в Python

Вопрос:

У меня есть набор данных для сопоставления AdWords. то есть выражения, которые могут быть вызваны действительными поисковыми запросами. Эти выражения следуют синтаксису AdWords с необязательными словами, требуемыми словами и отрицательными словами. Я ищу логику разбора для этих выражений в Python, которые преобразуют эти строки в объектно-ориентированные алгебраические представления. В частности, представление должно позволять тестировать совпадение с данным пользовательским запросом. Есть ли какой-либо код, доступный для этого?

Ответ №1

Я нашел решение, конвертировав в объект свое выражение AdWords: тогда вы могли бы делать все, что хотите, с лучшими характеристиками памяти!

class AdWordsExp :
def __init__ (self,awexp) :
self.tokens = self.parse(awexp)[0]
self.flag = self.parse(awexp)[1]

def parse (self, awexp) :
tokens = []
flag = []
begin = awexp[0]
if begin == ' ':
awexp = awexp[1:]
begin = awexp[0]
if begin == '+' :
result = awexp.split()
for words in result :
begin2 = words[0]
memo = self.memoisation(words[1:])
if begin2 == '+' :
tokens.append(memo)
flag.append(0)
else :
tokens.append(memo)
flag.append(1)
if begin == '"' :
result = awexp.split()
s=0
f=0
for words in result :
if s == 0 :
memo = self.memoisation(words[1:])
tokens.append(memo)
flag.append(0)
s=1
else :
if f == 0 :
l = len(words)
if words[l-1] == '"' :
memo = self.memoisation(words[:l-1])
tokens.append(memo)
flag.append(0)
f=1
else :
memo = self.memoisation(words)
tokens.append(memo)
flag.append(0)
else :
begin2 = words[0]
memo = self.memoisation(words[1:])
if begin2 == '+' :
tokens.append(memo)
flag.append(0)
else :
tokens.append(memo)
flag.append(1)
if begin == '[' :
result = awexp.split()
s=0
f=0
for words in result :
if s == 0 :
memo = self.memoisation(words[1:])
tokens.append(memo)
flag.append(0)
s=1
else :
if f == 0 :
l = len(words)
if words[l-1] == ']' :
memo = self.memoisation(words[:l-1])
tokens.append(memo)
flag.append(0)
f=1
else :
memo = self.memoisation(words)
tokens.append(memo)
flag.append(0)
else :
begin2 = words[0]
memo = self.memoisation(words[1:])
if begin2 == '+' :
tokens.append(memo)
flag.append(0)
else :
tokens.append(memo)
flag.append(1)
return [tokens,flag]
#print ([tokens, flag,dico])

def memoisation (self, word) :
l = len (dico)
if word in dico :
return dico[word]
else :
dico[word] = l+1
return l+1

Оцените статью
TechArks.Ru
Добавить комментарий