Python 对txt文件进行分类并仅替换分类词
在计算如何从txt文件中对单词进行语法化时遇到困难。我已经把这些单词列出来了,但我不知道在事实发生后如何把它们用柠檬词化 以下是我所拥有的:Python 对txt文件进行分类并仅替换分类词,python,nltk,lemmatization,Python,Nltk,Lemmatization,在计算如何从txt文件中对单词进行语法化时遇到困难。我已经把这些单词列出来了,但我不知道在事实发生后如何把它们用柠檬词化 以下是我所拥有的: import nltk, re nltk.download('wordnet') from nltk.stem.wordnet import WordNetLemmatizer def lemfile(): f = open('1865-Lincoln.txt', 'r') text = f.read().lower() f.cl
import nltk, re
nltk.download('wordnet')
from nltk.stem.wordnet import WordNetLemmatizer
def lemfile():
f = open('1865-Lincoln.txt', 'r')
text = f.read().lower()
f.close()
text = re.sub('[^a-z\ \']+', " ", text)
words = list(text.split())
初始化一个
WordNetLemmatizer
对象,并对行中的每个单词进行lemmatize。您可以使用fileinput
模块执行就地文件I/O
# https://stackoverflow.com/a/5463419/4909087
import fileinput
lemmatizer = WordNetLemmatizer()
for line in fileinput.input('1865-Lincoln.txt', inplace=True, backup='.bak'):
line = ' '.join(
[lemmatizer.lemmatize(w) for w in line.rstrip().split()]
)
# overwrites current `line` in file
print(line)
fileinput.input
在使用stdout时将其重定向到打开的文件。您也可以尝试在pywsd
包中的NLTK的WordNetleMatizer
周围使用包装器
安装:
pip install -U nltk
python -m nltk.downloader popular
pip install -U pywsd
代码:
针对你的问题:
from __future__ import print_function
from pywsd.util import lemmatize_sentence
with open('file.txt') as fin, open('outputfile.txt', 'w') as fout
for line in fin:
print(' '.join(lemmatize_sentence(line.strip()), file=fout, end='\n')
如图所示,对txt文件进行柠檬化并仅替换柠檬化的单词--`
导入nltk
从nltk.corpus导入停止词
从nltk.stem导入PorterStemmer
从nltk.tokenize导入单词\u tokenize
从nltk.stem导入WordNetLemmatizer
从pywsd.utils导入lemmatize_语句
lmm=WordNetLemmatizer()
ps=PorterStemmer()
新的_数据=[]
将open('/home/rahul/Desktop/align.txt',r')作为f:
f1=f.read()
f2=f1.split()
en_stops=set(stopwords.words('english'))
hu_stops=set(stopwords.words('hungarian'))
所有单词=f2
标点符号=“”!()-[]{};:'“\,./?@$%^&*.[]
#如果需要对一个字符串进行lemmatization,则在第行下面取消注释
#data='rahul学校教育遇到了幸福制造'
打印()
对于所有单词中的行:
new_data=''.join(使句子(行)变元化)
打印(新数据)
PS-根据您的需要进行识别。
希望这有帮助!!!这是否意味着我不必像以前那样先列出单词?@ArchivistG您可能仍然需要清理您的句子(使用正则表达式,为了简单起见,我省略了这一步)。没有什么可列出的,只是将单词进行柠檬化并写入文件。因此,我尝试了它,但它没有将任何内容进行柠檬化。它删除了偶尔出现的“s”或“ss”,但仅此而已。例如,它将“less”变为“le”。@ArchivistG如果您查看文档,
lemmatize
接受第二个作为词性的参数(名词、动词等)。默认情况下,所有单词都是名词,因此带-ing的动词不会被柠檬化,除非您设置了pos='v'
。您可以改为使用lemmatizer.lemmatize(lemmatizer.lemmatize(w),pos='v')
,但要小心……这太慢了。@ArchivistG祝您好运!如果您需要更多帮助,请随时ping(尽管我不确定如果这对你不起作用,我还能做些什么:p)请看一下“词干和柠檬化”部分。
from __future__ import print_function
from pywsd.util import lemmatize_sentence
with open('file.txt') as fin, open('outputfile.txt', 'w') as fout
for line in fin:
print(' '.join(lemmatize_sentence(line.strip()), file=fout, end='\n')
import nltk
from nltk.corpus import stopwords
from nltk.stem import PorterStemmer
from nltk.tokenize import word_tokenize
from nltk.stem import WordNetLemmatizer
from pywsd.utils import lemmatize_sentence
lmm = WordNetLemmatizer()
ps = PorterStemmer()
new_data= []
with open('/home/rahul/Desktop/align.txt','r') as f:
f1 = f.read()
f2 = f1.split()
en_stops = set(stopwords.words('english'))
hu_stops = set(stopwords.words('hungarian'))
all_words = f2
punctuations = '''!()-[]{};:'"\,<>./?@#$%^&*_~[<p>]'''
#if lemmatization of one string is required then uncomment below line
#data='this is coming rahul schooling met happiness making'
print ()
for line in all_words:
new_data=' '.join(lemmatize_sentence(line))
print (new_data)