为了账号安全,请及时绑定邮箱和手机立即绑定

根据输入解析、格式化和生成数据

根据输入解析、格式化和生成数据

PHP
慕姐4208626 2023-07-01 17:15:40
对于一些已知的输入,我有一些已知的输出/结果。基于此,我希望程序根据预填充的输入结果数据根据输入生成结果。输入示例:早上喝茶,午餐吃一些面包。晚餐中享受大蒜鸡的味道。新的一天从冷咖啡开始。中午吃点米饭和咖喱鱼。输出示例:早上喝茶。午餐吃点面包。晚餐吃大蒜鸡。喝冷咖啡。吃点米饭和咖喱鱼。我不想使用string replace或regexp因为它会经常损坏。我该如何或从哪里开始?
查看完整描述

3 回答

?
九州编程

TA贡献1785条经验 获得超4个赞

如果您有大量输入和输出对,则可以将其视为序列到序列任务。输入可以被视为源,输出可以被视为目标。您可以使用OpenNMT轻松开发基线模型。



查看完整回答
反对 回复 2023-07-01
?
互换的青春

TA贡献1797条经验 获得超6个赞

不太清楚您如何解决您的具体问题,但让我介绍几种解决文本相关问题的方法,因为这似乎是您感兴趣的。

0 级静态文本哈希

如果,这是一个很大的如果,您的输入是静态的,您可以将输入映射到输出的摘要。但是,正如您提到的,这很容易被破坏。即使多一个空格也会导致不匹配,这就是它的级别为 0 的原因。

1 级预处理您的输入:

删除单词之前、之后和之间的所有多余空格。

此步骤会将您的输入转换为:

Enjoy tea morning bread lunch. Enjoy taste garlic chicken dinner.
day starts cold coffee. noon rice fish curry.

接下来,您可以删除动词词形变化,这不适用于您的示例,但我们假设您有一个类似以下的句子:

drink tea, drank juice and drinks soda.

这句话你就变成:

drink tea, drink juice drink soda

您可以更深入地进行同义词规范化,例如:

drink tea, sip water, slurped a juice, swallow beer

那么,他们都将变成:

drink tea, drink water, drink juice, drink beer

完成这些步骤后,您就拥有了一种处理文本的非统计方式。这一切都归结为消除任何冗余和语言的丰富性并注重字面意思。

当然,这种方法会失去英语中包含的大量价值。你不能讽刺,你不能进行类比。因此,这适用于某些领域,但并不是那么先进。这种方法更多的是文本处理而不是语言处理。看到不同?

如果您需要更智能的方法来解决此问题,您应该研究全文搜索算法

2 级全文搜索算法

有多种方法可以做到这一点,这里是一种。你有这样一句话:

I want pizza

这个搜索词将变成

want piz za

并且会寻找

want piz
piz za
want za

这是非常基本的东西,它只是向您展示原始文本处理的工作原理以及实现此目的的方法。也许你可以让你的输入通过级别 1 进行处理,使它们更简单、变量更少,然后让它们通过级别 2 进行处理,以便在数据库中建立索引,然后你就有了一个很好的方法来查询它们

NLP 3 级 - 自然语言处理

这仍然不是机器学习,但它更智能,并且建立在所有其他步骤之上。基本上,您会清除输入的无意义内容,并尝试对其应用英语语法结构。

4级深度学习的东西

基本上,谷歌。你会得到一堆文本、一堆搜索查询、一堆将查询映射到文本的用户跟踪数据。您将所有这些输入到神经网络中,统计模型将为您检测模式并让您的搜索变得更好。

概括

如果这是一个认真的项目,请研究 NLU。当您跟踪使用情况时,它会给您一个不错的结果。然后,当您拥有足够的用户数据时,就可以进行深度学习。没有简单的方法可以解决这个问题,您要么手动执行此操作,要么实现具有其中一些功能的数据库,例如elasticsearch。但正如其中提到的评论之一,php 不是一种用于此目的的语言。


查看完整回答
反对 回复 2023-07-01
?
素胚勾勒不出你

TA贡献1827条经验 获得超9个赞

如果您的输入确实已知,那么您可以使用str_replace()例如


$input = 'Enjoy your tea in the morning then have some bread in the lunch. Enjoy the taste of a garlic chicken in the dinner.

Your day starts with cold coffee. In the noon have some rice and fish curry.';

$old = array('Enjoy your ', ' then have ', '. Enjoy the taste of a ', 'Your day starts with ', '. In the noon have ');

$new = array('Have '      , '. Have '    , '. Enjoy '               , 'Have '                , '. Have '            );

$output = str_replace($old, $new, $input);

请注意区分大小写以及空格、句点和其他标点符号。


如果您的输入不太为人所知,那么您可以像您猜测的那样使用正则表达式。


查看完整回答
反对 回复 2023-07-01
  • 3 回答
  • 0 关注
  • 140 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信