【问题标题】:Extract specification list from text (unknown format)从文本中提取规范列表(未知格式)
【发布时间】:2018-11-12 08:46:24
【问题描述】:

如何从格式未知的产品描述中提取规格(有时是无序列表,有时是 br 元素等),但它在前面看起来总是一样。

视觉效果是这样的:

一些描述文字,有时是一个句子,有时更多..

== 有时这里是空行,有时不是 ==

  • 规格项目1
  • 规格项目2

有没有办法在 PHP 中提取“通过它的视觉”?

例子:

<h2> desc <br>
<br>
&gt; <strong> T Shirt</strong><br>
&gt; Breathable mesh fabric<br>
&gt; Reflective detail<br>
&gt; Flat lock seams <br>

【问题讨论】:

  • 你尝试了什么?
  • 你想提取什么?你试过什么?
  • 我只需要提取那个“规格列表”并且我尝试过: 1. 提取 dbl br elem 之后的所有内容。 - 不起作用,有时它只有 1、2。尝试 find > char,不起作用,有时它在顶部文本描述中,或者有时该列表在行首没有 >。我想有一种方法可以unHTML 它,但让视觉格式以相同的方式,然后以某种方式提取它.. 真的不知道如何移动它

标签: php text information-extraction


【解决方案1】:

您可以尝试过滤您的条目。我已经设法将您的示例放入数组中。这将是一个与结果有点争论的情况:

<?php

$html =<<<HTML
<h2> desc </h2>
<br>
&gt; <strong> T Shirt</strong><br>
&gt; Breathable mesh fabric<br>
&gt; Reflective detail<br>
&gt; Flat lock seams <br>
HTML;

$no_html       = strip_tags($html);
$no_entities   = preg_replace('/&#?[a-z0-9]+;/i', '', $no_html);
$parts         = preg_split('/\R/', $no_entities);
$trimmed_parts = array_map('trim', $parts);
var_export($trimmed_parts);

输出:

array (
    0 => 'desc',
    1 => '',
    2 => 'T Shirt',
    3 => 'Breathable mesh fabric',
    4 => 'Reflective detail',
    5 => 'Flat lock seams',
)

【讨论】:

  • 实体的过滤可能是破坏性的,如果说你在描述中编码了&符号。或者,如果是这种情况,您可以将匹配项锚定到行首,或者放弃更具体的通用规则。
  • 希望如果你有 html 列表,你有换行符。否则,这些可能是更多的工作。您可能需要不同的食谱。试一试,如果示例输入、您尝试过的内容和期望的输出有问题,请返回。
  • 如果您可以扩展该功能以将 ul>li 列表转换为正在提取的格式,这将是 100% 正确答案
  • 它可以很好地工作,无需对 ul li 列表进行调整。但是,如果 lis 之间没有换行,则可能不会。相反,您可能需要在 ul 或 li 标签上展开,然后以类似方式剥离。
【解决方案2】:

这可以通过 file_get_contents() 和一些正则表达式处理来完成。请确保您在 PHP.ini (fopen URL wrappers) 中启用了正确的设置

参考: http://php.net/manual/en/filesystem.configuration.php

示例代码:

<?php

$page = file_get_contents('Provide your url here');

preg_match("/regex pattern here/", $page, $agent_name);

// display agent name matches
print_r($agent_name)

个人建议 - 使用 python 会简化这个过程。为此目的已经有很多软件包可用。例如- bs4

【讨论】:

  • 我的数据库中有那个描述,所以我不需要获取那个内容,这个问题只是关于你没有提供的那个正则表达式..
猜你喜欢
  • 1970-01-01
  • 2013-04-26
  • 2011-08-02
  • 1970-01-01
  • 2015-11-13
  • 2023-03-12
  • 1970-01-01
  • 2019-07-29
  • 1970-01-01
相关资源
最近更新 更多