从句子中提取短语的算法

时间:2016-02-04 09:51:39

标签: java php c algorithm

我坚持用于从句子中提取短语的实现算法。每个短语必须包含2到5个单词。例如,我有一句话'这篇文章是关于我想测试它的'。我需要从这句话中得到一个包含下一个短语的数组:

  1. 本文
  2. 此文字为
  3. 本文约为
  4. 这篇文章是关于我的
  5. text is
  6. 文字是关于
  7. 文字是关于我的
  8. 文字是关于我的愿望
  9. 是关于
  10. 是关于我的
  11. 是我的愿望
  12. 是我的愿望
  13. 关于我的
  14. 关于我的愿望
  15. 关于我希望
  16. 关于我的测试愿望
  17. 我的愿望
  18. 我希望
  19. 我希望测试
  20. 我希望测试它
  21. 希望
  22. 希望测试
  23. 希望测试它
  24. 进行测试
  25. 进行测试
  26. 测试
  27. 在PHP中,我从这样的代码开始:

    $text = 'This text is about my wish to test it';
    $words = explode(' ', $text); 
    // $words = ['This', 'text', 'is', 'about', 'my', 'wish', 'to', 'test', 'it']
    

    请帮我实现主算法。它可以通过任何其他编程语言(C,Java,Python),而不仅仅是PHP。

2 个答案:

答案 0 :(得分:2)

我需要的算法代码:

$text = 'This text is about my wish to test it';
$words = explode(' ', $text);
$wordsCount = count($words);

for ($i = 0; $i < $wordsCount; $i++) {
    $window = 2;
    $windowEnd = 5;
    if ($i + $windowEnd > $wordsCount) {
        $windowEnd = $wordsCount - $i;
    }
    if ($windowEnd < $window) {
        break;
    }
    while ($window <= $windowEnd) {
        for ($j = $i; $j < $i + $window; $j++) {
            echo $words[$j], "\n";
        }
        echo "\n";
        $window++;
    }
}

答案 1 :(得分:1)

在Java中

read()

返回

String text = "This text is about my wish to test it";

int indexFirst = 0;
while (indexFirst > -1 && text.length() > indexFirst +1) {
    int indexLast = text.indexOf(" ", indexFirst + 1);
    indexLast = text.indexOf(" ", indexLast + 1);
    while (indexLast > -1 && text.length() > indexLast + 1) {
        System.out.println(text.substring(indexFirst, indexLast));
        indexLast = text.indexOf(" ", indexLast + 1);
    }
    System.out.println(text.substring(indexFirst));
    indexFirst = text.indexOf(" ", indexFirst + 1);
}