Вопрос:

Получить 'N' номера предыдущих и следующих слов из искомого ключевого слова из большой строки

c# text-mining string-operations

24 просмотра

2 ответа

44 Репутация автора

Я ищу решение, где я могу получить -nh + nth количество слов из моего искомого ключевого слова из строки


ех.

string searchString= "For several years I’ve had a little “utility” function that I’ve used in several projects that I use to convert property names into strings. One use case is for instance when mapping code to some data source or third party API that where the names are used as keys...";
string keywordToSearch="instance";
int wordsToFetch=5;

Вывод будет: Один вариант использования, например, когда отображение кода на некоторые

В настоящее время я работаю над темой интеллектуального анализа текста, в которой мне нужно извлечь файлы и найти определенное ключевое слово + его предложение из извлеченной строки. Ранее я получал первое предложение из строки всякий раз, когда получал желаемое ключевое слово. но теперь требование изменилось, как указано выше, вот фрагмент кода

using System.Linq;
using System.Text.RegularExpressions;
using System;

public class Program
{
    public static void Main()
    {
        var sentence = "For several years I’ve had a little “utility” function that I’ve used in several projects that I use to convert property names into strings. One use case is for instance when mapping code to some data source or third party API that where the names are used as keys. The method uses “static reflection”, or rather it parses the expression tree from a lambda expression, to figure out the name of a property that the lambda expression returns the value of.Look, good against remotes is one thing, good against the living, that’s something else.";
        var keyword = "instance";
      var keyToSearch = new Regex("[^.!?;]*(" + keyword + ")[^.!?;]*");
            var m = keyToSearch.Matches(sentence);

            var result1 = Enumerable.Range(0, m.Count).Select(index => m[index].Value).ToList();

        Console.WriteLine("Output:- {0} ",result1[0]);
    }
}

dotnetFiddle

вот выход я получил

Вывод: - Один из вариантов использования, например, при отображении кода в некоторый источник данных или сторонний API, где имена используются в качестве ключей

это дает мне первое предложение, где я получил желаемое ключевое слово, любое предложение, какие изменения я должен сделать, чтобы получить новый требуемый результат.

Автор: T. Giri Источник Размещён: 11.08.2019 07:25

Ответы (2)


1 плюс

3154 Репутация автора

Как насчет этого: 1) разбить его на слова 2) найти индекс вашего keywordи 3) взять диапазон слов, начинающихся 5до того, как вы нашли индекс

using System;
using System.Linq;

namespace Foo
{
    class Program
    {
        static void Main(string[] args)
        {
             var sentence = "For several years I’ve had a little “utility” function that I’ve used in several projects that I use to convert property names into strings. One use case is for instance when mapping code to some data source or third party API that where the names are used as keys. The method uses “static reflection”, or rather it parses the expression tree from a lambda expression, to figure out the name of a property that the lambda expression returns the value of.Look, good against remotes is one thing, good against the living, that’s something else.";
            var keyword = "instance";

            var words = sentence.Split(' ').ToArray(); // split into words
            int index = Array.FindIndex(words, w => w.Equals(keyword)); // find the index within
            // take 11 words from 5 before the index of your keyword
            var r = Enumerable
                .Range(index - 5, 11)
                .Select(i => words[i]);
            var result = string.Join(' ', r);

            Console.WriteLine("Output:- {0} ", result);
            Console.ReadKey();
        }
    }
}

Это дает желаемый результат, но не касается:

  1. Несколько матчей
  2. Соответствие на другой случай
  3. Возможность IndexOutOfRangeExceptionпри получении нужных слов
Автор: ath Размещён: 11.08.2019 08:21

0 плюса

44 Репутация автора

благодаря @ath получил решение

using System.Linq;
using System.Text.RegularExpressions;
using System;

public class Program
{
    public static void Main()
    {
            var sentence = "case is for instance doooo mapping code to some data source or third party API that where the names are used as keys. The method uses “static reflection”, or rather it parses the expression tree from a lambda expression, to figure out the name of a property that the lambda expression returns the value of.Look, good against remotes is one thing, good against the living, that’s something else.For several years I’ve had a little “utility” function that I’ve used in several projects that I use to convert property names into strings. One use case is for instance when mapping code to some data source or third party API that where the names are used as keys. The method uses “static reflection”, or rather it parses the expression tree from a lambda expression, to figure out the name of a property that the lambda expression returns the value of.Look, good against remotes is one thing, good against the living, that’s something else.";
            var keyword = "instance";

            int wordFreq = 2;
            var words = sentence.Split(' ').ToArray(); // split into words
            int foundndex = Array.FindIndex(words, w => w.Equals(keyword)); // find the index within
                                                                            // take wordFreq words from wordFreq before the index of your keyword
            var wordsArray = Enumerable
                    .Range((foundndex - wordFreq) > 0 ? (foundndex - wordFreq) : 0, (wordFreq*2+1 > (words.Length)-1) ? (words.Length)-1 : wordFreq*2+1 )
                    .Select(i => words[i]).ToArray();            

            var outPut = string.Join(" ", wordsArray);

            Console.WriteLine("Output:- {0} ",outPut);              
    }
}

Надеюсь, я обработал все возможные исключения!

DotNetFiddle

Автор: T. Giri Размещён: 11.08.2019 12:51
Вопросы из категории :
32x32