Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 对txt文件进行分类并仅替换分类词_Python_Nltk_Lemmatization - Fatal编程技术网

Python 对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

在计算如何从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.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)