এনএলটিকে দিয়ে একটি নতুন কর্পাস তৈরি করা হচ্ছে


83

আমি গণনা করেছি যে প্রায়শই আমার শিরোনামের উত্তর ডকুমেন্টেশনগুলি পড়তে হয়, তবে আমি এনএলটিকে বইটি চালিয়েছিলাম তবে এটি উত্তর দেয় না। আমি পাইথনে এক ধরণের নতুন।

আমার কাছে অনেকগুলি .txtফাইল রয়েছে এবং আমি NLTK কর্পাসের জন্য সরবরাহ করা কর্পাস ফাংশনগুলি ব্যবহার করতে সক্ষম হতে চাই nltk_data

আমি চেষ্টা করেছি PlaintextCorpusReaderকিন্তু এর চেয়ে বেশি আমি পেতে পারি না:

>>>import nltk
>>>from nltk.corpus import PlaintextCorpusReader
>>>corpus_root = './'
>>>newcorpus = PlaintextCorpusReader(corpus_root, '.*')
>>>newcorpus.words()

newcorpusপাঙ্ক্ট ব্যবহার করে আমি বাক্যগুলিকে কীভাবে ভাগ করব ? আমি পাঙ্ক ফাংশনগুলি ব্যবহার করার চেষ্টা করেছি কিন্তু পাঙ্ক ফাংশনগুলি PlaintextCorpusReaderক্লাসটি পড়তে পারে না ?

আপনি কীভাবে আমাকে কীভাবে টেক্সট ফাইলগুলিতে বিভাগিত ডেটা লিখতে পারেন সেই দিকে নিয়ে যেতে পারেন?

উত্তর:


40

আমি মনে করি PlaintextCorpusReaderইতিমধ্যে আপনার ইনপুট ভাষাটি যদি ইংরেজী হয় তবে একটি পাঙ্ক টোকেনাইজার দিয়ে ইনপুটটিকে বিভাগ করেছে।

প্লেইনটেক্সটকর্পাসরিডার এর কনস্ট্রাক্টর

def __init__(self, root, fileids,
             word_tokenizer=WordPunctTokenizer(),
             sent_tokenizer=nltk.data.LazyLoader(
                 'tokenizers/punkt/english.pickle'),
             para_block_reader=read_blankline_block,
             encoding='utf8'):

আপনি পাঠককে একটি শব্দ এবং বাক্য টোকেনাইজার পাস করতে পারেন তবে শেষেরটির জন্য ইতিমধ্যে ডিফল্ট nltk.data.LazyLoader('tokenizers/punkt/english.pickle')

একটি একক স্ট্রিংয়ের জন্য, একটি টোকনাইজার নিম্নলিখিত হিসাবে ব্যবহৃত হবে ( এখানে ব্যাখ্যা করা হয়েছে , পাঙ্ক টোকেনাইজারের জন্য বিভাগ 5 দেখুন)।

>>> import nltk.data
>>> text = """
... Punkt knows that the periods in Mr. Smith and Johann S. Bach
... do not mark sentence boundaries.  And sometimes sentences
... can start with non-capitalized words.  i is a good variable
... name.
... """
>>> tokenizer = nltk.data.load('tokenizers/punkt/english.pickle')
>>> tokenizer.tokenize(text.strip())

ব্যাখ্যার জন্য ধন্যবাদ. বুঝেছি. তবে আমি কীভাবে বিভাজনযুক্ত বাক্যগুলিকে পৃথক txt ফাইলে আউটপুট করব?
আলভাস


68

এটি কীভাবে কাজ করে তা নির্ধারণের কয়েক বছর পরে, এর আপডেট টিউটোরিয়ালটি এখানে দেওয়া হয়েছে

পাঠ্য ফাইলগুলির ডিরেক্টরি সহ এনএলটিকে কর্পস কীভাবে তৈরি করবেন?

মূল ধারণাটি হল nltk.corpus.reader প্যাকেজটি ব্যবহার করা । কেস আপনি textfiles একটি ডিরেক্টরি আছে ইংরেজি , এটা ব্যবহার করা সর্বোত্তম PlaintextCorpusReader

আপনার যদি এমন কোনও ডিরেক্টরি থাকে যা দেখতে এরকম দেখায়:

newcorpus/
         file1.txt
         file2.txt
         ...

কেবল কোডের এই লাইনগুলি ব্যবহার করুন এবং আপনি একটি কর্পাস পেতে পারেন:

import os
from nltk.corpus.reader.plaintext import PlaintextCorpusReader

corpusdir = 'newcorpus/' # Directory of corpus.

newcorpus = PlaintextCorpusReader(corpusdir, '.*')

উল্লেখ্য: যে PlaintextCorpusReaderডিফল্ট ব্যবহার করবে nltk.tokenize.sent_tokenize()এবং nltk.tokenize.word_tokenize()ইংরেজি জন্য বিল্ড বাক্য এবং শব্দ এবং এই ফাংশন মধ্যে আপনার গ্রন্থে বিভক্ত করতে হয়, তাহা হইলে না সমস্ত ভাষা জন্য কাজ করি।

পরীক্ষার পাঠ্য ফাইলগুলি তৈরি করার এবং এনএলটিকে দিয়ে একটি কর্পাস কীভাবে তৈরি করা যায় এবং বিভিন্ন স্তরে কর্পাসকে কীভাবে অ্যাক্সেস করা যায় তার সম্পূর্ণ কোড এখানে রয়েছে:

import os
from nltk.corpus.reader.plaintext import PlaintextCorpusReader

# Let's create a corpus with 2 texts in different textfile.
txt1 = """This is a foo bar sentence.\nAnd this is the first txtfile in the corpus."""
txt2 = """Are you a foo bar? Yes I am. Possibly, everyone is.\n"""
corpus = [txt1,txt2]

# Make new dir for the corpus.
corpusdir = 'newcorpus/'
if not os.path.isdir(corpusdir):
    os.mkdir(corpusdir)

# Output the files into the directory.
filename = 0
for text in corpus:
    filename+=1
    with open(corpusdir+str(filename)+'.txt','w') as fout:
        print>>fout, text

# Check that our corpus do exist and the files are correct.
assert os.path.isdir(corpusdir)
for infile, text in zip(sorted(os.listdir(corpusdir)),corpus):
    assert open(corpusdir+infile,'r').read().strip() == text.strip()


# Create a new corpus by specifying the parameters
# (1) directory of the new corpus
# (2) the fileids of the corpus
# NOTE: in this case the fileids are simply the filenames.
newcorpus = PlaintextCorpusReader('newcorpus/', '.*')

# Access each file in the corpus.
for infile in sorted(newcorpus.fileids()):
    print infile # The fileids of each file.
    with newcorpus.open(infile) as fin: # Opens the file.
        print fin.read().strip() # Prints the content of the file
print

# Access the plaintext; outputs pure string/basestring.
print newcorpus.raw().strip()
print 

# Access paragraphs in the corpus. (list of list of list of strings)
# NOTE: NLTK automatically calls nltk.tokenize.sent_tokenize and 
#       nltk.tokenize.word_tokenize.
#
# Each element in the outermost list is a paragraph, and
# Each paragraph contains sentence(s), and
# Each sentence contains token(s)
print newcorpus.paras()
print

# To access pargraphs of a specific fileid.
print newcorpus.paras(newcorpus.fileids()[0])

# Access sentences in the corpus. (list of list of strings)
# NOTE: That the texts are flattened into sentences that contains tokens.
print newcorpus.sents()
print

# To access sentences of a specific fileid.
print newcorpus.sents(newcorpus.fileids()[0])

# Access just tokens/words in the corpus. (list of strings)
print newcorpus.words()

# To access tokens of a specific fileid.
print newcorpus.words(newcorpus.fileids()[0])

শেষ অবধি, পাঠ্যগুলির একটি ডিরেক্টরি পড়তে এবং অন্য ভাষায় একটি এনএলটিকে কর্পস তৈরি করতে, আপনাকে অবশ্যই প্রথমে নিশ্চিত করতে হবে যে আপনার কাছে পাইথন-কলযোগ্য শব্দ টোকেনাইজেশন এবং বাক্য টোকেনাইজেশন মডিউল রয়েছে যা স্ট্রিং / বেসস্ট্রিং ইনপুট নেয় এবং এই জাতীয় আউটপুট উত্পাদন করে:

>>> from nltk.tokenize import sent_tokenize, word_tokenize
>>> txt1 = """This is a foo bar sentence.\nAnd this is the first txtfile in the corpus."""
>>> sent_tokenize(txt1)
['This is a foo bar sentence.', 'And this is the first txtfile in the corpus.']
>>> word_tokenize(sent_tokenize(txt1)[0])
['This', 'is', 'a', 'foo', 'bar', 'sentence', '.']

সুস্পষ্ট করার জন্য ধন্যবাদ. যদিও অনেকগুলি ভাষা ডিফল্টরূপে সমর্থিত।
অ্যান্ড্রু টবি

4
যদি কেউ AttributeError: __exit__ত্রুটি পায় । open()পরিবর্তে ব্যবহার করুনwith()
তাসদিক রহমান

12
 >>> import nltk
 >>> from nltk.corpus import PlaintextCorpusReader
 >>> corpus_root = './'
 >>> newcorpus = PlaintextCorpusReader(corpus_root, '.*')
 """
 if the ./ dir contains the file my_corpus.txt, then you 
 can view say all the words it by doing this 
 """
 >>> newcorpus.words('my_corpus.txt')

দেবনাগরী ভাষার জন্য কিছু সমস্যা ডেকে আনে।
ashim888

0
from nltk.corpus.reader.plaintext import PlaintextCorpusReader


filecontent1 = "This is a cow"
filecontent2 = "This is a Dog"

corpusdir = 'nltk_data/'
with open(corpusdir + 'content1.txt', 'w') as text_file:
    text_file.write(filecontent1)
with open(corpusdir + 'content2.txt', 'w') as text_file:
    text_file.write(filecontent2)

text_corpus = PlaintextCorpusReader(corpusdir, ["content1.txt", "content2.txt"])

no_of_words_corpus1 = len(text_corpus.words("content1.txt"))
print(no_of_words_corpus1)
no_of_unique_words_corpus1 = len(set(text_corpus.words("content1.txt")))

no_of_words_corpus2 = len(text_corpus.words("content2.txt"))
no_of_unique_words_corpus2 = len(set(text_corpus.words("content2.txt")))

enter code here
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.