当前位置: 首页 > 知识库问答 >
问题:

将文本一分为二,但在最接近的句子处

夏侯航
2023-03-14

$text变量示例:

知识产权是一种权利,是一种精英的权利,是劳动和财富的暂时性权利。但是,在最低限度上,我们需要一个实验室来进行日常工作。两人或两人在一个无教区的房间里互相指责。除偶尔因疏忽而死亡外,不得因疏忽而导致动物死亡。

一分为二:

$half = strlen($text) / 2;

将使我找到consequat中的o字符。

我怎样才能找到最近的句子定界符(DOT)在文本中间的位置?在本例中,它的后面是7个字符o


我想在找出文本的半点时忽略超文本标记语言,并忽略html属性内的点等。

共有3个答案

赫连俊悟
2023-03-14
function abbrevia($str, $maxChars) {    $limit=$maxChars;
    if (strlen($str)<=$maxChars) return $str;
    else while ($str[$limit]!=" " && $str[$limit]!="." && $str[$limit]!=";" && $str[$limit]!="," && $str[$limit]!="!" && $str[$limit]) $limit++;
    return substr($str,0,($limit))."...";
}

您可以修改此函数

赵宏达
2023-03-14

假设您的句子可以以句号以外的其他字符结尾,您可以查看以下内容:

$s = 'Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.';

// find center (rounded down)
$mid = floor(strlen($s) / 2);
// find range of characters from center that are not ?, ! or .
$r = strcspn($s, '.!?', $mid);

// remember to include the punctuation character
echo substr($s, 0, $mid + $r + 1);

你可能需要稍微调整一下,但它应该能做好它的工作。对于更高级的东西,你将涉足NLP(自然语言处理)领域,对此也有PHP库:

http://sourceforge.net/projects/nlp/

林运浩
2023-03-14

看看substr、strip_标签和strpo。在strpos的帮助下,您可以找到下一个点的位置,并使用strip_标记从字符串中删除所有html标记。

$string = 'Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborumt.';
$string = strip_tags($string);
$half = intval(strlen($string)/2);
echo substr($string, 0, strpos($string, '.', $half)+1);

考虑到必须在代码< > $1/<代码>的值之后存在一个点,否则输出将不是你想要的。

也许是这样的?

if (strpos($string, '.', $half) !== false)
    echo substr($string, 0, strpos($string, '.', $half)+1);
else
    echo substr($string, 0, $half) . '...';
 类似资料:
  • 问题内容: 我有一个文本文件。我需要得到一个句子清单。 如何实现呢?有很多细微之处,例如缩写中使用了点。 我的旧正则表达式效果很差: 问题答案: 自然语言工具包满足你的需求。 该群组发布表明这样做: (我还没有尝试过!)

  • 问题内容: 我试图弄清楚如何将货币金额向上舍入至最接近的5美分。以下显示了我的预期结果 我需要结果的精度为2(如上所示)。 更新资料 按照下面的建议,我能做的就是 我不认为这是100%的原始数据-我担心在转换为双精度和从双精度转换时精度可能会丢失。但是,这是到目前为止我能想到的最好的方法,并且 似乎 可以解决。 问题答案: 您可以使用普通双精度来做到这一点。 编辑:对于负数,您需要减去0.5

  • 问题内容: 我想从字符串中列出句子列表,然后将其打印出来。我不想使用NLTK来做到这一点。因此,它需要在句子末尾的句点上进行分隔,而不是小数点,缩写或名称的标题,或者句子中包含.com。这是对正则表达式的尝试,不起作用。 示例输出应如下所示 问题答案: (?<!\w.\w.)(?<![A-Z][a-z].)(?<=.|\?)\s 尝试这个。分割您的字符串。您还可以查看演示。 http://rege

  • 问题内容: 我想知道是否有可能找到一个最接近的元素的元素 ,是不是 在那里。 例如,如果我们具有[1,3,6,7]值,并且正在寻找最接近4的元素,则它应返回3,因为3是数组中的最大数字,小于4。 我希望这是有道理的,因为英语不是我的母语。 问题答案: 如果数组已排序,则可以在以下位置进行修改的二进制搜索:

  • 我想用句子截断文本。 示例文本:'Lorem ipsum dolor坐在amet,奉献adipiscing elit!UT车辆laoreet urna, commodo,在马萨诸塞州。赛德volutpat nunc简历urna拍卖,在tempus enim rhoncus。马蒂斯康莫多的莫尔比交流电击器?Morbi在ornare Arcu,sagittis scelerisque risus。Ae

  • 问题内容: 我已经编写了这段代码,用于拆分字符串并将其存储在字符串数组中:- 但是,我添加了[az],因为我想处理一些缩写问题。但是随后我的结果显示为: 此外,当埃弗里特(Everett)试图指导他们进行基础数学训练时,他们被证明是毫无反应的 我看到丢失了split函数中指定的模式。对我来说,可以省略句号,但是丢失单词的最后一个字母会打乱其含义。 有人可以帮助我吗?此外,有人可以帮助我解决缩写吗?