Как подсчитать вхождение слова или слова в группу (фразу) - PullRequest
0 голосов
/ 29 апреля 2019

У меня есть ключевые слова в виде столбца в кадре данных (D1) , которые составляют 1 грамм, 2 грамма, а в некоторых случаях также 3 грамма.Мне нужно найти эти граммы в другом столбце dataframe (D2) как имеющие фразы и подсчитать количество n-граммов, чтобы обеспечить их некоторый вес.

Я пытался использовать вложенные циклы, но это слишком дорого с вычислительной точки зрения, кроме того, результаты, которые я получаю, довольно разочаровывают, одинаковые символы, такие как 'a' in ', также совпадают.

word_list = data['Words'].values.tolist() #converting the keywords into a list
s = pd.Series({w: pos_phrases.Phrases.str.contains(w, flags=re.IGNORECASE).sum() for w in word_list})  

Фразы находятся в pos_phrases под Фразами.Вот некоторые из ключевых слов:

«высокая точность», «hi-fi», «хирургический», «прямой», «верный», «мертвый на цели», «широкий от знака»и т. д.

Фразы как разговор двух людей.например,

Пример фразы : «Привет, Добрый вечер, как поживаешь?: «Добрый вечер», «насыщенный событиями», «событие»

здесь, «событие» должно не совпадать, потому что оноявляется частью "насыщенной событиями".Тем не менее, это совпадает.Я надеюсь, что смогу объяснить мое требование.

1 Ответ

1 голос
/ 29 апреля 2019

Простой, простой способ справиться с этим - использовать регулярные выражения следующим образом:

import re

Phrase = "Hello Good evening, how are you, so can you point out the facts which lead to this eventful night"
Words = "Good evening, eventful, event"

word_list = Words.split(', ')

for word in word_list:
    pattern =  r"\b" + word + r"\b" 
    matches = re.finditer(pattern, Phrase, re.MULTILINE | re.IGNORECASE)
    print(word, ': ', len([match.group() for match in matches]))  

Output:  
## Good evening :  1
## eventful :  1
## event :  0  
...