Как остановить слова в списке python?

У меня есть список python, как показано ниже

documents = ["Human machine interface for lab abc computer applications",
             "A survey of user opinion of computer system response time",
             "The EPS user interface management system",
             "System and human system engineering testing of EPS",
             "Relation of user perceived response time to error measurement",
             "The generation of random binary unordered trees",
             "The intersection graph of paths in trees",
             "Graph minors IV Widths of trees and well quasi ordering",
             "Graph minors A survey"]

Теперь мне нужно остановить его (каждое слово) и получить другой список. Как мне это сделать?

Ответ 1

from stemming.porter2 import stem

documents = ["Human machine interface for lab abc computer applications",
             "A survey of user opinion of computer system response time",
             "The EPS user interface management system",
             "System and human system engineering testing of EPS",
             "Relation of user perceived response time to error measurement",
             "The generation of random binary unordered trees",
             "The intersection graph of paths in trees",
             "Graph minors IV Widths of trees and well quasi ordering",
             "Graph minors A survey"]

documents = [[stem(word) for word in sentence.split(" ")] for sentence in documents]

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

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

Если вы не хотите этого разделения, вы можете сделать:

documents = [stem(word) for sentence in documents for word in sentence.split(" ")]

Вместо этого вы оставите один непрерывный список.

Если вы хотите объединить слова в конце, вы можете сделать:

documents = [" ".join(sentence) for sentence in documents]

или сделать это в одной строке:

documents = [" ".join([stem(word) for word in sentence.split(" ")]) for sentence in documents]

Сохранение структуры предложения или

documents = " ".join(documents)

Если игнорировать его.

Ответ 2

Возможно, вам захочется взглянуть на NLTK (Natural Language ToolKit). Он имеет модуль nltk.stem, который содержит различные разные стволовые клетки.

См. также этот вопрос.

Ответ 3

Хорошо. Итак, используя пакет stemming, у вас будет что-то вроде этого:

from stemming.porter2 import stem
from itertools import chain

def flatten(listOfLists):
    "Flatten one level of nesting"
    return list(chain.from_iterable(listOfLists))

def stemall(documents):
    return flatten([ [ stem(word) for word in line.split(" ")] for line in documents ])

Ответ 4

вы можете использовать NLTK:

from nltk.stem import PorterStemmer


ps = PorterStemmer()
final = [[ps.stem(token) for token in sentence.split(" ")] for sentence in documents]

NLTK имеет множество функций для ИК-систем, проверьте его