通过在 python 3 中使用算术和逻辑运算符保留某些单词来标记单词?

在对大型语料库中的多个句子进行标记时,我需要将某些单词保留为原始形式,例如.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++ 是面向对象的编程语言'。]


森栏
浏览 90回答 1
1回答

慕森卡

该解决方案涵盖了给定的示例C++,C# asp.net并在删除正常标点符号的同时保留了诸如 , 之类的词。import nltkparagraph = (        '.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 tokenstokenized_data = pre_data(paragraph)print(tokenized_data)出去[['.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']]但是,这个简单的正则表达式可能不适用于您文本中的所有技术术语。提供完整示例以获得更通用的解决方案。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python