cii-text-analysis/vendor/vanderlee/php-sentence/tests/SentenceTest.php

305 lines
13 KiB
PHP
Raw Permalink Normal View History

2026-02-10 16:19:59 +01:00
<?php
namespace Vanderlee\Sentence\Tests;
use PHPUnit_Framework_TestCase;
use Vanderlee\Sentence\Sentence;
/**
* @coversDefaultClass Sentence
*/
class SentenceTest extends PHPUnit_Framework_TestCase
{
/**
* @var Sentence
*/
protected $object;
/**
* Sets up the fixture, for example, opens a network connection.
* This method is called before a test is executed.
*/
protected function setUp()
{
$this->object = new Sentence();
}
/**
* @covers ::count
*/
public function testCountEmpty()
{
$this->assertSame(0, $this->object->count(''));
$this->assertSame(0, $this->object->count(' '));
$this->assertSame(0, $this->object->count("\n"));
}
/**
* @covers ::count
*/
public function testCountWord()
{
$this->assertSame(1, $this->object->count('Hello'));
$this->assertSame(1, $this->object->count('Hello.'));
$this->assertSame(1, $this->object->count('Hello...'));
$this->assertSame(1, $this->object->count('Hello!'));
$this->assertSame(1, $this->object->count('Hello?'));
$this->assertSame(1, $this->object->count('Hello?!'));
}
/**
* @covers ::count
*/
public function testCountTwoWords()
{
$this->assertSame(1, $this->object->count('Hello world'));
$this->assertSame(1, $this->object->count('Hello world.'));
$this->assertSame(1, $this->object->count('Hello world...'));
$this->assertSame(1, $this->object->count('Hello world!'));
$this->assertSame(1, $this->object->count('Hello world?'));
$this->assertSame(1, $this->object->count('Hello world?!'));
}
/**
* @covers ::count
*/
public function testCountMultipleWords()
{
$this->assertSame(2, $this->object->count('Hello world. Are you there'));
$this->assertSame(2, $this->object->count('Hello world. Are you there?'));
$this->assertSame(1, $this->object->count('Hello world, Are you there?'));
$this->assertSame(1, $this->object->count('Hello world: Are you there?'));
$this->assertSame(1, $this->object->count('Hello world... Are you there?'));
}
/**
* @covers ::count
*/
public function testCountLinebreaks()
{
$this->assertSame(2, $this->object->count("Hello world...\rAre you there?"));
$this->assertSame(2, $this->object->count("Hello world...\nAre you there?"));
$this->assertSame(2, $this->object->count("Hello world...\r\nAre you there?"));
$this->assertSame(2, $this->object->count("Hello world...\r\n\rAre you there?"));
$this->assertSame(2, $this->object->count("Hello world...\n\r\nAre you there?"));
$this->assertSame(2, $this->object->count("Hello world...\n\nAre you there?"));
$this->assertSame(2, $this->object->count("Hello world...\r\rAre you there?"));
}
/**
* @covers ::count
*/
public function testCountAbbreviations()
{
$this->assertSame(1, $this->object->count("Hello mr. Smith."));
$this->assertSame(1, $this->object->count("Hello, OMG Kittens!"));
$this->assertSame(1, $this->object->count("Hello, abbrev. Kittens!"));
$this->assertSame(1, $this->object->count("Hello, O.M.G. Kittens!"));
$this->assertSame(1, $this->object->count("Last week, former director of the A.B.C. John B. Smith was fired."));
$this->assertSame(1, $this->object->count("Mr. Smith was not available for comment.."));
}
/**
* @covers ::count
*/
public function testCountMultiplePunctuation()
{
$this->assertSame(2, $this->object->count("Hello there. Brave new world."));
$this->assertSame(1, $this->object->count("Hello there... Brave new world."));
$this->assertSame(2, $this->object->count("Hello there?... Brave new world."));
$this->assertSame(2, $this->object->count("Hello there!... Brave new world."));
$this->assertSame(2, $this->object->count("Hello there!!! Brave new world."));
$this->assertSame(2, $this->object->count("Hello there??? Brave new world."));
}
/**
* @covers ::count
*/
public function testCountOneWordSentences()
{
$this->assertSame(2, $this->object->count("You? Smith?"));
$this->assertSame(2, $this->object->count("You there? Smith?"));
$this->assertSame(1, $this->object->count("You mr. Smith?"));
$this->assertSame(2, $this->object->count("Are you there. Mister Smith?"));
$this->assertSame(2, $this->object->count("Are you there. Smith, sir?"));
$this->assertSame(2, $this->object->count("Are you there. Mr. Smith?"));
}
/**
* @covers ::split
*/
public function testSplitEmpty()
{
$this->assertSame([], $this->object->split(''));
$this->assertSame([], $this->object->split(' '));
$this->assertSame([], $this->object->split("\n"));
}
/**
* @covers ::cleanupUnicode
*/
public function testCleanupUnicode()
{
$this->assertSame(['Fix "these" quotes'], $this->object->split('Fix "these" quotes'));
$this->assertSame(['Fix "these" quotes'], $this->object->split("Fix \xC2\xABthese\xC2\xAB quotes"));
}
/**
* @covers ::split
*/
public function testSplitWord()
{
$this->assertSame(['Hello'], $this->object->split('Hello'));
$this->assertSame(['Hello.'], $this->object->split('Hello.'));
$this->assertSame(['Hello...'], $this->object->split('Hello...'));
$this->assertSame(['Hello!'], $this->object->split('Hello!'));
$this->assertSame(['Hello?'], $this->object->split('Hello?'));
$this->assertSame(['Hello?!'], $this->object->split('Hello?!'));
}
/**
* @covers ::split
*/
public function testSplitMultipleWords()
{
$this->assertSame(['Hello world.', ' Are you there'], $this->object->split('Hello world. Are you there'));
$this->assertSame(['Hello world.', ' Are you there?'], $this->object->split('Hello world. Are you there?'));
$this->assertSame(['Hello world.', 'Are you there'], $this->object->split('Hello world. Are you there', Sentence::SPLIT_TRIM));
$this->assertSame(['Hello world.', 'Are you there?'], $this->object->split('Hello world. Are you there?', Sentence::SPLIT_TRIM));
$this->assertSame(['Hello world, Are you there?'], $this->object->split('Hello world, Are you there?'));
$this->assertSame(['Hello world: Are you there?'], $this->object->split('Hello world: Are you there?'));
$this->assertSame(['Hello world... Are you there?'], $this->object->split('Hello world... Are you there?'));
}
/**
* @covers ::split
*/
public function testSplitLinebreaks()
{
$this->assertSame(["Hello world...\r", "Are you there?"], $this->object->split("Hello world...\rAre you there?"));
$this->assertSame(["Hello world...\n", " Are you there?"], $this->object->split("Hello world...\n Are you there?"));
$this->assertSame(["Hello world...\n", "Are you there?"], $this->object->split("Hello world...\nAre you there?"));
$this->assertSame(["Hello world...\r\n", "Are you there?"], $this->object->split("Hello world...\r\nAre you there?"));
$this->assertSame(["Hello world...\r\n\r", "Are you there?"], $this->object->split("Hello world...\r\n\rAre you there?"));
$this->assertSame(["Hello world...\n\r\n", "Are you there?"], $this->object->split("Hello world...\n\r\nAre you there?"));
$this->assertSame(["Hello world...\n\n", "Are you there?"], $this->object->split("Hello world...\n\nAre you there?"));
$this->assertSame(["Hello world...\r\r", "Are you there?"], $this->object->split("Hello world...\r\rAre you there?"));
}
/**
* @covers ::split
*/
public function testSplitAbbreviations()
{
$this->assertSame(['Hello mr. Smith.'], $this->object->split("Hello mr. Smith."));
$this->assertSame(['Hello, OMG Kittens!'], $this->object->split("Hello, OMG Kittens!"));
$this->assertSame(['Hello, abbrev. Kittens!'], $this->object->split("Hello, abbrev. Kittens!"));
$this->assertSame(['Hello, O.M.G. Kittens!'], $this->object->split("Hello, O.M.G. Kittens!"));
$this->assertSame(['Last week, former director of the A.B.C. John B. Smith was fired.'], $this->object->split("Last week, former director of the A.B.C. John B. Smith was fired."));
$this->assertSame(['Mr. Smith was not available for comment..'], $this->object->split("Mr. Smith was not available for comment.."));
$this->assertSame(['Hello mr. Smith.', ' Are you there?'], $this->object->split("Hello mr. Smith. Are you there?"));
}
/**
* @covers ::split
*/
public function testSplitOneWordSentences()
{
$this->assertSame(["You?", " Smith?"], $this->object->split("You? Smith?"));
$this->assertSame(["You there?", " Smith?"], $this->object->split("You there? Smith?"));
$this->assertSame(["You mr. Smith?"], $this->object->split("You mr. Smith?"));
$this->assertSame(["Are you there.", " Mister Smith?"], $this->object->split("Are you there. Mister Smith?"));
$this->assertSame(["Are you there.", " Smith, sir?"], $this->object->split("Are you there. Smith, sir?"));
$this->assertSame(["Are you there.", " Mr. Smith?"], $this->object->split("Are you there. Mr. Smith?"));
}
/**
* @covers ::split
*/
public function testSplitParenthesis()
{
$this->assertSame(["You there (not here!).", " Mister Smith"], $this->object->split("You there (not here!). Mister Smith"));
$this->assertSame(["You (not him!) here.", " Mister Smith"], $this->object->split("You (not him!) here. Mister Smith"));
$this->assertSame(["(What!) you here.", " Mister Smith"], $this->object->split("(What!) you here. Mister Smith"));
$this->assertSame(["You there (not here).", " Mister Smith"], $this->object->split("You there (not here). Mister Smith"));
$this->assertSame(["You (not him) here.", " Mister Smith"], $this->object->split("You (not him) here. Mister Smith"));
$this->assertSame(["(What) you here.", " Mister Smith"], $this->object->split("(What) you here. Mister Smith"));
}
/**
* @covers ::split
*/
public function testSentenceWithNumericValues()
{
$this->assertSame(1, $this->object->count("The price is £25.50, including postage and packing."));
$this->assertSame(1, $this->object->count("The price is 25.50, including postage and packing."));
$this->assertSame(1, $this->object->count("I went true to size at 10.5 cms."));
$this->assertSame(2, $this->object->count("The prices are £25.50 or £27.50, including postage and packing. I went true to size at 10.5 cms."));
$this->assertSame(1, $this->object->count("Prices will go up for 8.6% and because of that it is expensive."));
}
/**
* @covers ::replaceFloatNumbers
* @covers ::restoreReplacements
*
* @dataProvider dataSplit
*
* @param string[] $expected
* @param string $text
*
* @return void
*/
public function testSplit($expected, $text)
{
$this->assertSame($expected, $this->object->split($text));
$this->assertSame(count($expected), $this->object->count($text));
}
public function dataSplit()
{
return [
'repeat 2' => [
[
'He got £2.',
' He lost £2.',
' He had £2.',
],
'He got £2. He lost £2. He had £2.',
],
'times' => [
[
'If at 8:00 pm, do something, there is a good chance that by 8:45 pm we do something else.',
' This is another sentence',
],
'If at 8:00 pm, do something, there is a good chance that by 8:45 pm we do something else. This is another sentence',
],
'lead/trailing zeroes' => [
[
'Number 00.20 it is',
],
'Number 00.20 it is',
],
'Bug report #15; ))) -1 index offset' => [
[
')))',
],
')))',
],
'Price' => [
[
'The price is 25.50, including postage and packing.',
],
'The price is 25.50, including postage and packing.',
],
'Recursive replacement' => [
[
'From 11 to 12.',
' From 11 to 15.',
],
'From 11 to 12. From 11 to 15.',
],
];
}
}