小编Xeo*_*oss的帖子

使用PHP在任意HTML中查找重要文本?

我有一些随机的HTML布局,其中包含我想要提取的重要文本.我不能只是strip_tags()因为它会从侧边栏/页脚/标题/等中留下一堆额外的垃圾.

我发现了一个用Python构建方法,我想知道在PHP中是否有这样的东西.

这个概念相当简单:如果一行文本值得输出,请使用有关文本密度与HTML代码的信息.(这不是一个新颖的想法,但它有效!)基本过程的工作原理如下:

  1. 解析HTML代码并跟踪处理的字节数.
  2. 以每行或每段为基础存储文本输出.
  3. 将每个文本行与描述它所需的HTML字节数相关联.
  4. 通过计算文本t> o字节的比率来计算每行的文本密度.
  5. 然后通过使用神经网络确定该行是否是内容的一部分.

只需检查线路的密度是否高于固定阈值(或平均值),您就可以获得相当不错的结果,但如果您使用机器学习,系统会减少错误 - 更不用说它更容易实现了!

更新:我开始获得一个可以从随机HTML模板中提取主要内容的答案.由于我无法共享我将使用的文档 - 只需选择任意随机博客网站并尝试从布局中提取正文.请记住,标题,侧边栏和页脚也可能包含文本.请参阅上面的链接以获取建议.

php regex dom text-parsing

4
推荐指数
1
解决办法
1107
查看次数

CouchDB在运行时映射/减少任何文档属性?

我来自一个SQL世界,其中查找由几个对象属性(published = TRUE或user_id = X)完成,并且在任何地方没有连接(因为1:1缓存层).似乎文档数据库非常适合我的数据.

我试图找出是否有办法将一个(或多个)对象属性传递给CouchDB map/reduce函数,以便在数据库中查找匹配的文档,而无需为每种文档类型创建数十个视图.

是否可以传递所需的文档属性键以在运行时匹配CouchDB并让它返回匹配的对象(或匹配分页的对象的数量)?

例如,在一个页面上,我想要所有带有doc.user_idX的帖子doc.published.在另一个页面上,我可能希望所有带有doc.tags[]"sport"标签的文档.

couchdb document-database

4
推荐指数
1
解决办法
855
查看次数

无法访问__callStatic内的Super Globals?

以下代码在我的安装上失败,PHP 5.3.6-13ubuntu3.2这让我想知道为什么我无法在此方法中访问$ _SERVER Super Global.

<?php

header('Content-Type: text/plain');

$method = '_SERVER';
var_dump($$method); // Works fine

class i
{
    public static function __callStatic($method, $args)
    {
        $method = '_SERVER';
        var_dump($$method); // Notice: Undefined variable: _SERVER
    }
}

i::method();
Run Code Online (Sandbox Code Playgroud)

谁知道这里有什么问题?

php static-methods

4
推荐指数
1
解决办法
360
查看次数

为什么单元测试系统包含无用的断言方法?

我想知道为什么像PHPUnit这样的单元测试系统包括似乎是重复的运算符,只会增加单元测试的开销.我可以理解其中的几种方法,但大多数似乎都浪费时间.

public function testPop(array stack)
{
    this->assertEquals('foo', array_pop(stack));
    this->assertEmpty(stack);
}
Run Code Online (Sandbox Code Playgroud)

vs原始代码(更短更快)

public function testPop(array stack)
{
    this->assert('foo' == array_pop(stack));
    this->assert(empty(stack));
}
Run Code Online (Sandbox Code Playgroud)

这些方法是否适用于那些不理解编程语言的人仍然可以编写单元测试?我相信这个项目的作者比我聪明,所以必须有一个理由.

tdd build-automation unit-testing

4
推荐指数
1
解决办法
223
查看次数

XPath以递归方式删除空DOM节点?

我试图找到一种方法从HTML源清理一堆空DOM元素,如下所示:

<div class="empty">
    <div>&nbsp;</div>
    <div></div>
</div>
<a href="http://example.com">good</a>
<div>
    <p></p>
</div>
<br>
<img src="http://example.com/logo.png" />
<div></div>
Run Code Online (Sandbox Code Playgroud)

但是,我不想损害有效元素或换行符.所以结果应该是这样的:

<a href="http://example.com">good</a>
<br>
<img src="http://example.com/logo.png" />
Run Code Online (Sandbox Code Playgroud)

到目前为止,我尝试了一些像这样的XPath:

$xpath = new DOMXPath($dom);

//$x = '//*[not(*) and not(normalize-space(.))]';
//$x = '//*[not(text() or node() or self::br)]';
//$x = 'not(normalize-space(.) or self::br)';
$x = '//*[not(text() or node() or self::br)]';

while(($nodeList = $xpath->query($x)) && $nodeList->length > 0) {
    foreach ($nodeList as $node) {
        $node->parentNode->removeChild($node);
    }
}
Run Code Online (Sandbox Code Playgroud)

有人能告诉我正确的XPath来删除那些空的DOM节点吗?(即使是空的,img,br和输入也有用)

当前输出:

<div>
    <div>&nbsp;</div>

</div>
<a href="http://example.com">good</a>
<div>

</div>
<br>
Run Code Online (Sandbox Code Playgroud)

更新

为了澄清,我正在寻找一个XPath查询,它是: …

php xpath dom

4
推荐指数
1
解决办法
3591
查看次数

为什么Google的MX服务器与SSL证书CN不匹配?

在向 google 帐户发送电子邮件之前,我的脚本会查找 google 电子邮件服务器的 MX 记录。结果是:

gmail-smtp-in.l.google.com
alt1.gmail-smtp-in.l.google.com
alt2.gmail-smtp-in.l.google.com
alt3.gmail-smtp-in.l.google.com
alt4.gmail-smtp-in.l.google.com
Run Code Online (Sandbox Code Playgroud)

然后我成功连接到gmail-smtp-in.l.google.com,并在EHLO开始STARTTLS请求切换到 SSL 后。但是,我设置脚本来检查并确保证书中列出的主机也与我连接的域匹配。

stream_context_set_option($fh, 'ssl', 'CN_match', 'gmail-smtp-in.l.google.com`);
Run Code Online (Sandbox Code Playgroud)

然而,这就是事情破裂的地方。我收到以下错误:

stream_socket_enable_crypto(): Peer certificate CN='mx.google.com' did not match expected CN='gmail-smtp-in.l.google.com'
Run Code Online (Sandbox Code Playgroud)

我检查了一下nslookup mx.google.com它的位置,发现它不存在。

Server:     127.0.0.1
Address:    127.0.0.1#53

** server can't find mx.google.com: NXDOMAIN
Run Code Online (Sandbox Code Playgroud)

为什么 SSL 证书与使用它的域不匹配?我错过了什么吗?

以下是我的脚本从他们那里收到的证书。

Array
(
    [name] => /C=US/ST=California/L=Mountain View/O=Google Inc/CN=mx.google.com
    [subject] => Array
        (
            [C] => US
            [ST] => California
            [L] => Mountain View
            [O] => Google Inc
            [CN] …
Run Code Online (Sandbox Code Playgroud)

ssl smtp ssl-certificate starttls

4
推荐指数
1
解决办法
3521
查看次数

如何使用 Amazon DynamoDB 在没有热分区的情况下对论坛进行建模?

AWS DynamoDB 文档包含论坛的示例架构。然而,该模式能够回答的问题数量似乎很少。此外,该表似乎还存在热键问题(同一分区上的大量回复备份)。

在题为“Amazon DynamoDB 的高级设计模式”的演讲中,演示者用了大约 43 分钟的时间,仅使用具有 3 个 GSI(索引)的单个表分解了Audible 的复杂用例。

我正在尝试从标准 RDBMS 3NF 背景学习正确的 DynamoDB 建模。如何设计论坛来防止热分区,同时仍然满足这些常见用例?

查询:

  • 按论坛列出的主题(按发布日期或最近回复排序)
  • 按主题回复(按分页发布日期排序)
  • 用户回复(按发布日期排序)
  • 按用户划分的主题(按发布日期排序)
  • 得票最多的主题

基本架构(?):

  • 论坛:分区键:Forum_GUID。属性:名称、描述
  • 用户:分区键:User_GUID。属性:电子邮件、加入日期
  • 主题:复合键:Forum_GUID、Topic_GUID。属性:posted_by、日期、投票、正文、主题
  • 回复:复合键:Topic_GUID、Reply_GUID。属性:posted_by、日期、投票、正文

我假设有多种解决方案(包括使用单个表)。我正在寻找任何可以解决此问题的答案,同时提供有关何时以及如何正确使用索引来扩展应用程序写入的指导。

database database-design amazon-web-services nosql amazon-dynamodb

4
推荐指数
1
解决办法
1790
查看次数

在php中将字符串转换为唯一数值

我需要一个独特的内部int来代表几种随机内容类型,我不能硬编码为类常量或配置选项.然而,当我可以使用更容易理解的术语"帖子"时,我不想提及"2".因此,尽管从一个字符串中获取INT值的方法似乎对几个项目相当无冲突.

有没有办法在PHP而不是我建立的方式做到这一点?

$strings = array('post', 'comment', 'blog', 'article', 'forum', 'news', 'page');

foreach( $strings as $string ) {

    print $string . ' = ';

    $string = str_split($string);
    $sum = 0;
    foreach( $string as $char ) {
        $sum += ord($char);
    }

    var_dump( $sum );

    print '<br />';
}
Run Code Online (Sandbox Code Playgroud)

这与用户输入无关,因此不必担心设计中存在明显的缺陷.

:编辑:

我需要一个数字索引来存储在数据库中以便快速查找.即从"文章"或"新闻"中讲述"帖子".但是我不知道那些1-8类型的内容会被调用,所以我不能在应用程序中将它们硬编码为常量.因此,我能想到的最好的方法是创建每个单词的数字版本(这意味着要检查以确保两个单词不能总结为相同的数字).

如果这是一个超过8个单词的系统,那么这种方法注定要失败,并且总和碰撞的概率很高.此外,如果我可以选择知道将使用哪些单词,那么这也将是一个糟糕的设计,因为类常量会更好.

php

3
推荐指数
1
解决办法
7072
查看次数

使用 settype() 与 *val() 函数进行最快的 PHP 类型处理?

我试图找出最快的方法(在 PHP 5 中)来检查一个值是否是我需要类型。我创建了两行代码,它们都做同样的事情。问题是我无法根据基准确定哪个最快。

(is_scalar($value) ? intval($value) : 0);
settype($value, 'integer');
Run Code Online (Sandbox Code Playgroud)

我创建了以下测试代码,但除了我自己的 PC(Core2Quad + XP 32 位 + php5.2.5)和一个用于测试它的 Dreamhost 帐户之外,我没有其他任何东西 - 这两个代码显示的时间大致相同。

$array = array(
    'false' => FALSE,
    'false2'=> 0,
    'false3'=> '0',
    'false4'=> 'FALSE',
    'true'  => TRUE,
    'true2' => 1,
    'true3' => '1',
    'true4' => 'TRUE',

    'char'  => chr(250),
    'char2' => chr(10),
    'utf'   => 0xF0,
    'utf1'  => 0xFE,

    'number' => '452.5435',
    'number2' => '-3948.33e2',
    'number3' => -343.54,
    'number4' => 99.999,
    'number5' => '3jk439fjk23945t324098523.349fj324r',

    'int'   => …
Run Code Online (Sandbox Code Playgroud)

php benchmarking setvalue

3
推荐指数
1
解决办法
1508
查看次数

非常复杂(Postgre/My)SQL示例?

在测试抽象概念时,我经常发现自己需要非常复杂的 SQL示例,或者只是在使用PostgreSQL,MySQL甚至SQLite时比较数据库样式和结构.

我认为这意味着还有其他人需要疯狂的查询才能让我们看到可能的事情,并确保我们的数据库层可以处理我们抛出的任何内容.

那么,任何人都可以共享一些查询,这些查询甚至可以通过最核心的ORM-all-way方式进行循环吗?

PostgreSQL的

SELECT [ ALL | DISTINCT [ ON ( expression [, ...] ) ] ]
    * | expression [ [ AS ] output_name ] [, ...]
    [ FROM from_item [, ...] ]
    [ WHERE condition ]
    [ GROUP BY expression [, ...] ]
    [ HAVING condition [, ...] ]
    [ WINDOW window_name AS ( window_definition ) [, ...] ]
    [ { UNION | INTERSECT | EXCEPT } [ ALL ] select ]
    [ …
Run Code Online (Sandbox Code Playgroud)

mysql sql postgresql

3
推荐指数
1
解决办法
816
查看次数