Токенизация слов путем сохранения определенных слов с арифметическими и логическими операторами в Python 3? - PullRequest
1 голос
/ 19 октября 2019

При использовании нескольких предложений из большого корпуса мне нужно сохранить некоторые слова в первоначальном виде, например .Net, C#, C++. Я также хочу удалить знаки препинания (.,!_-()=*&^%$@~ и т. Д.), Но нужно сохранить слова типа .net, .htaccess, .htpassword, c++ и т. Д.

Я пробовал оба nltk.word_tokenize и nltk.regexp_tokenize, но не получаюожидаемый результат.

Пожалуйста, помогите мне решить вышеупомянутую проблему.

Код:

import nltk
from nltk import regexp_tokenize
from nltk.corpus import stopwords


def pre_data():
    tokenized_sentences = nltk.sent_tokenize(tokenized_raw_data)
    sw0 = (stopwords.words('english'))
    sw1 = ["i.e", "dxint", "hrangle", "idoteq", "devs", "zero"]
    sw = sw0 + sw1
    tokens = [[word for word in regexp_tokenize(word, pattern=r"\s|\d|[^.+#\w a-z]", gaps=True)] for word in tokenized_sentences]
    print(tokens)
pre_data()

Tokenized_raw_data - это обычный текстовый файл. Он содержит несколько предложений с пробелами между ними и состоит из таких слов, как .blog, .net, c ++, c #, asp.net, .htaccess и т. Д.

Пример

['.blog - это универсальный домен верхнего уровня, предназначенный для использования блогами '.,

' C # - универсальный многопарадигмальный язык программирования '.,

' C ++ - это объект-ориентированный язык программирования '.]

1 Ответ

1 голос
/ 26 октября 2019

Это решение охватывает данные примеры и сохраняет слова типа C++, C# asp.net и т. Д. При удалении обычной пунктуации.

import nltk

paragraph = (
        '.blog is a generic top-level domain intended for use by blogs. '
        'C# is a general-purpose, multi-paradigm programming language. '
        'C++ is object-oriented programming language. '
        'asp.net is something very strange. '
        'The most fascinating language is c#. '
        '.htaccess makes my day!'
)

def pre_data(raw_data):
    tokenized_sentences = nltk.sent_tokenize(raw_data)
    tokens = [nltk.regexp_tokenize(sentence, pattern='\w*\.?\w+[#+]*') for sentence in tokenized_sentences]
    return tokens

tokenized_data = pre_data(paragraph)
print(tokenized_data)

Out

[['.blog', 'is', 'a', 'generic', 'top', 'level', 'domain', 'intended', 'for', 'use', 'by', 'blogs'], 
 ['C#', 'is', 'a', 'general', 'purpose', 'multi', 'paradigm', 'programming', 'language'], 
 ['C++', 'is', 'object', 'oriented', 'programming', 'language'], 
 ['asp.net', 'is', 'something', 'very', 'strange'], 
 ['The', 'most', 'fascinating', 'language', 'is', 'c#'], 
 ['.htaccess', 'makes', 'my', 'day']]

Однако это простое регулярное выражение, вероятно, не подойдет для всех технических терминов в ваших текстах. Приведите полные примеры для более общего решения.

...