代码之家  ›  专栏  ›  技术社区  ›  skrubber

动态创建选择框并保存选择

  •  0
  • skrubber  · 技术社区  · 4 年前

    我将一个文本拆分为多个标记,并为每个标记创建一个选择框。如何保存令牌和相应的选定值?这是我的套索尝试。

    checkpoint = “bert-base-uncased”
    tokenizer = BertTokenizer.from_pretrained(checkpoint)
    
    if “load_state” not in st.session_state:
    st.session_state.load_state = False
    
    #txt = “There is a leak on the third floor with the AC”
    saved = False
    
    txt = st.text_area(“”)
    tokenize = st.button(“Tokenize”)
    input_cols = st.container()
    
    if tokenize or st.session_state.load_state:
       st.session_state.load_state = True
       tokens = tokenizer.tokenize(txt)
       token_length = len(tokens)
    
       options = [“L”, “E”]
    
       with input_cols:
         cols = st.columns(token_length)
         for ix, col in enumerate(cols):
            tokenboxes = col.selectbox(tokens[ix], key=ix, options=options)
    
    save = st.button(“Save”)
    
    if save:
         st.write(tokenboxes[1]) # the key should exist from above but this index doesnt exist
    
    0 回复  |  直到 4 年前
        1
  •  0
  •   skrubber    4 年前

    我自己解决了。其想法是将令牌和密钥(以唯一标识链接到不同令牌的选择框)捕获到字典中。然后使用该dict返回当前选择框选择的状态。此外,将自定义函数传递给on_chhange参数,然后将密钥作为参数之一发送出去也会有所帮助。只是放在那里供参考。

     with input_cols:
            for ix, col in enumerate(cols):
                k = tokens[ix] + "_" +  str(ix)
                token_dict[k] = tokens[ix]
                tokenboxes[k] = col.selectbox(tokens[ix], key=k, options=options, on_change=track_changes, args=(k,), index=0)
    
    save = st.button("Save")
    
    if save:
        #print(changed_tokens)
        for k,v in token_dict.items():
            st.text(v + " --> " + tokenboxes[k])