Примечание: Я не могу использовать любой другой импорт, чем SYS и гипергликемию на этот вопросPython - проверка, все ли слова в строке в массиве
Для присвоения я должен взять в двух файлах, как система аргументы и оба файла содержат строки строк.
Получите мое задание, я хочу прочитать одну строку за раз в одном файле и проверить, имеются ли все слова в этой строке в другом файле.
Вот файлы:
g1.ecfg
S -> NP VP
NP -> Det N
NP -> PN
Det -> "the"
N -> "dog"
N -> "rat"
N -> "elephant"
PN -> "Alice"
PN -> "Bob"
VP -> V NP
V -> "admired"
V -> "bit"
V -> "chased"
u1a.utt
the aardvark bit the dog
the dog bit the man
Bob killed Alice
Итак, я хочу, чтобы прочитать каждую строку в U1A. utt и убедитесь, что каждое слово в этой строке находится в g1.ecfg.
Я понял, что кавычки в g1 может быть проблемой, так что я положил все слова, которые в кавычках в массиве без кавычек, оставленных в.
Мой текущий код всегда возвращает ложь, которая производит «Нет действительный синтаксический анализ ", даже если строка должна печатать" Parsing !!! "
Может кто-нибудь помочь мне понять, как сравнивать слова в каждой строке с файлом g1?
Вот мой код:
import sys
import io
# usage = python CKYdet.py g#.ecfg u#L.utt
# Command Line Arguments - argv[0], argv[1], argv[2]
script = sys.argv[0]
grammarFile = open(sys.argv[1])
utteranceFile = open(sys.argv[2])
# Initialize rules from grammarFile
ruleArray = []
wordsInQuotes = []
uttWords = []
for line in grammarFile:
rule = line.rstrip('\n')
start = line.find('"') + 1
end = line.find('"', start)
ruleArray.append(rule)
wordsInQuotes.append(line[start:end]) #create a set of words from grammar file
for line in utteranceFile:
x = line.split()
print x
if (all(x in grammarFile for x in line)): #if all words found in grammarFile
print "Parsing!!!"
else:
print "No valid parse"
Я думаю, что это может иметь что-то с моими списки быть hashable или нет, или, может быть вопрос объема, но я изо всех сил, чтобы найти альтернативу, которая работает для меня.
'все (x в грамматикеFile для x в строке)'. Вы проверяете, находится ли каждый символ в строке '' grammarFile''. Это не похоже на то, что вы пытаетесь сделать. Вероятно, что-то больше похоже на 'x в словахInQuotes для x в line.split()'. –
Это сработало! Огромное спасибо. Это была всего лишь небольшая логическая ошибка, но я потратил много времени на то, чтобы понять, что происходит. –