我正在编写代码,以便分析包含字符串或数字元素的列表(或字典/元组)。但我有一个问题:我可以分析简单的数字(从0到9),但不能分析其他数字。 这是我的代码:
grammaire = nltk.CFG.fromstring("""
L -> OPEN CONTENT CLOSE
OPEN -> "["
CLOSE -> "]"
CONTENT -> Element Seq |
Seq -> | S Element Seq
S -> ","
Element -> Word | nombre | T | L | D
T -> "(" BeginTuple ")"
BeginTuple -> ElementTuple S ElementTuple EndTuple
EndTuple -> S ElementTuple |
ElementTuple -> nombre | T
D -> "{" BeginDic "}"
BeginDic -> ElementDic EndDic
EndDic -> S ElementDic EndDic |
ElementDic -> Key ":" Value
Key -> Word
Value -> nombre | T | L
Word -> "Bonjour" | "Aurevoir" | "Bye" | "Cya" | "Coucou" | " " | "Hello" | "Hi"
nombre -> chiffre | chiffre nombre
chiffre -> '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9'
""")
sent,res,elmt = "[{Bonjour:1,Hello:(1,2)}]",[],''
c = '()[]{}:,'
for x in sent:
if x in c:
if len(elmt) == 0:
res += [x,]
else:
#try: res += [int(elmt),] #si c'est un nombre on le transforme en int
#except: res += [elmt,]
res += [elmt,]
elmt = ""
res += [x,]
else:
elmt += x
print(res)
最重要的一行是“chiffre”和“nombre”。我做错什么了?另外,我需要对字符串做同样的处理(所以chiffre将是'a'“b”;“c”…'nombre将是相同的)。在
我试着在我的列表中把数字作为Int而不是Str,但它不起作用。。。(参照带有try/except的注释区域)。然后我画了这棵树。在
对您的问题的狭义回答是,您的标记器将多位数数字分组为单个标记。如果您分别标记每个数字,它将起作用。更一般地说,您应该更彻底地处理标记化的任务;例如,您的代码太脆弱,无法支持将引号分隔的字符串视为单个标记之类的事情。在
但是:为什么要尝试解析任意python列表的字符串表示?别这么做。如果你在读你自己写的数据,用更简单的形式写出来,这样你就可以很容易地读到它。E、 g.每一条记录都是由一个标签和一个数字列表组成的吗?将每个记录写入一个空格分隔的行。读入和解析这些都很简单。在
对于结构更复杂的数据,使用^{} 写出文件并读回。它为您处理所有解析。在
相关问题 更多 >
编程相关推荐