数字语法NLTK

2024-09-26 17:57:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在编写代码,以便分析包含字符串或数字元素的列表(或字典/元组)。但我有一个问题:我可以分析简单的数字(从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的注释区域)。然后我画了这棵树。在


Tags: 字符串代码列表res数字elementopenseq
1条回答
网友
1楼 · 发布于 2024-09-26 17:57:18

对您的问题的狭义回答是,您的标记器将多位数数字分组为单个标记。如果您分别标记每个数字,它将起作用。更一般地说,您应该更彻底地处理标记化的任务;例如,您的代码太脆弱,无法支持将引号分隔的字符串视为单个标记之类的事情。在

但是:为什么要尝试解析任意python列表的字符串表示?别这么做。如果你在读你自己写的数据,用更简单的形式写出来,这样你就可以很容易地读到它。E、 g.每一条记录都是由一个标签和一个数字列表组成的吗?将每个记录写入一个空格分隔的行。读入和解析这些都很简单。在

对于结构更复杂的数据,使用^{}写出文件并读回。它为您处理所有解析。在

相关问题 更多 >

    热门问题