gpt4 book ai didi

algorithm - 我怎样才能将这个明文 RP 风格的字符串解析成一个更通用的 XML 风格的字符串?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:07:01 25 4
gpt4 key购买 nike

我正在制作一个应用程序,可以将角色扮演风格的消息翻译成更通用的内容。用户可以指定他们的偏好,例如:

Moves
- /me <move>
- *<move>*
Speech
- <speech>
- "<speech>"
Out-of-Character
- [<ooc>]
- ((ooc))
- //ooc

我需要像这样解析一条消息:

/me eats food "This is *munch* good!" [You're good at this]

或者像这样:

*eats food* This is *munch* good! ((You're good at this))

变成一个更通用的、类似 XML 的字符串,如下所示:

<move>eats food <speech>This is <move>munch</move> good!</speech> <ooc>You're good at this</ooc></move>

但关于哪个在哪个里面。例如:

*eats food "This is munch* good" // You're good at this

应该解析为:

<move>eats food "This is munch</move><speech> good" </speech><ooc> You're good at this</ooc>

即使这不是用户的意图。请注意,最后一个示例中的引号未被解析,因为它们没有包装完整的片段,并且当前移动片段在遇到第一个时尚未完成,而在第二个出现时语音已经开始,并且第二个在它之后没有另一个围绕一个单独的语音段。

我已经尝试过使用树甚至正则表达式以迭代方式、递归方式执行此操作,但我还没有找到一种可以像我想要的那样工作的解决方案。 如何将上述 RP 样式消息解析为上述通用 XML 样式消息?

保留间距也很重要。

以下是使用上面列出的首选项的一些其他示例:

I like roller coasters.
[what are you like?]
/me eats a hamburger // wanna grab lunch after this?
*jumps up and down* This ((the party)) is great!
/me performs *an action* within an action "And that's just fine [As is *an action* in ooc in speech]"
And messages /me can change contexts // at any point
[But ill-formatted ones *must be parsed] according "to* the rules"
-And text formatted in <non-specified ways> is &not treated; specially-

成为:

<speech>I like roller coasters.</speech>
<ooc>what are you like?</ooc>
<move>eats a hamburger <ooc> wanna grab lunch after this?</ooc></move>
<move>jumps up and down</move><speech> This <ooc>the party</ooc> is great!</speech>
<move>performs <move>an action</move> within an action <speech>And that's just fine <ooc>As is <move>an action</move> in ooc in speech</ooc></speech></move>
<speech>And messages <move>can change contexts <ooc> at any point</ooc></move></speech>
<ooc>But ill-formatted ones *must be parsed</ooc><speech> according <speech>to* the rules</speech></speech>
<speech>-And text formatted in &lt;non-specified ways&gt; is &amp;not treated; specially-</speech>

最佳答案

您拥有的是一堆应该触发 xml 标记的标记。为每个标签使用一个函数来实现这一点相当简单。

void move(){
xmlPrintWriter.println("<move>");
parse();
xmlPrintWriter.println(content);
xmlPrintWriter.println("</move>");
}

parse() 对输入文本进行消费和分类的地方。

 void parse(){
if (text.startsWith("*")) action = MOVE;
... other cases

if ( action == MOVE){
move();
}
... other actions.

解析方法必须检查所有可能的状态改变器“*” -> 移动,“((” -> ooc,“”” -> 语音等等。

MOVE 是一个类常量,action 是一个状态变量,还有 textxmlPrintWritermoveparse 都是方法

如果您允许最后一个示例,则此方法将不起作用。然后情况变得非常棘手,需要根据具体情况来决定。

关于algorithm - 我怎样才能将这个明文 RP 风格的字符串解析成一个更通用的 XML 风格的字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29803206/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com