কিভাবে একটি তালিকায় একটি স্ট্রিং বিভক্ত?


574

আমি চাই আমার পাইথন ফাংশনটি একটি বাক্য (ইনপুট) বিভক্ত করে প্রতিটি শব্দ একটি তালিকাতে সঞ্চয় করে। আমার বর্তমান কোড বাক্যটি বিভক্ত করে তবে শব্দগুলিকে একটি তালিকা হিসাবে সঞ্চয় করে না। আমি কেমন করে ঐটি করি?

def split_line(text):

    # split the text
    words = text.split()

    # for each word in the line:
    for word in words:

        # print the word
        print(words)

1
এই কোডটির কোন অংশটি কাজ করে না? আপনি কি ত্রুটি বার্তা বা আপনার যে সমস্যাটি দিচ্ছেন তা সরবরাহ করতে পারেন?
এস .লট

4
এটি যেমন রয়েছে, আপনি তালিকার প্রতিটি শব্দের শব্দের সম্পূর্ণ তালিকা মুদ্রণ করবেন। আমি মনে করি আপনি print(word)আপনার শেষ লাইন হিসাবে ব্যবহার করতে চেয়েছিলেন ।
tgray

উত্তর:


487
text.split()

প্রতিটি শব্দ একটি তালিকায় সংরক্ষণ করার জন্য এটি পর্যাপ্ত হওয়া উচিত। wordsবাক্যটির শব্দের একটি তালিকা ইতিমধ্যে রয়েছে, সুতরাং লুপের প্রয়োজন নেই।

দ্বিতীয়ত এটি টাইপো হতে পারে তবে আপনার লুপটি কিছুটা গণ্ডগোল হয়েছে। আপনি যদি সত্যিই অ্যাপেন্ড ব্যবহার করতে চান না, এটি হবে:

words.append(word)

না

word.append(words)

447

textহোয়াইটস্পেসের পর পরের কোনও রানে স্ট্রিংটি বিভক্ত করে ।

words = text.split()      

স্ট্রিং বিভক্ত textবিভেদক করুন: ","

words = text.split(",")   

পরিবর্তনশীল শব্দের একটি হবে listএবং textডিলিমিটারে বিভাজন থেকে শব্দগুলি থাকবে ।


86

str.split ()

স্টিমের শব্দের একটি তালিকা প্রেরণা হিসাবে সেপ ব্যবহার করে স্ট্রিংয়ে ফিরে আসুন ... যদি সেপটি নির্দিষ্ট না করা হয় বা না হয় তবে একটি আলাদা বিভাজনকারী অ্যালগরিদম প্রয়োগ করা হয়: পরপর শ্বেত স্পেসের রানগুলি একক বিভাজক হিসাবে বিবেচিত হয় এবং ফলাফলটি এতে অন্তর্ভুক্ত থাকবে স্ট্রিংটির নেতৃত্বাধীন বা শ্বেতক্ষেত্রের পশ্চাদপসরণ থাকলে শুরু বা শেষের কোনও খালি স্ট্রিং নেই।

>>> line="a sentence with a few words"
>>> line.split()
['a', 'sentence', 'with', 'a', 'few', 'words']
>>> 

@ ওয়ারওয়ারিয়ুক - ডকস.পিথন.আর. / ২ / লিবারি / স্টাডিটাইপস html# str.split
গিমেল

52

আপনার বাক্য-হিসাবে-তালিকা হিসাবে আপনি কী পরিকল্পনা করছেন তার উপর নির্ভর করে আপনি প্রাকৃতিক ভাষা টুক কিটটি দেখতে চাইতে পারেন । এটি পাঠ্য প্রক্রিয়াজাতকরণ এবং মূল্যায়নের সাথে ভারীভাবে ডিল করে। আপনার সমস্যা সমাধানের জন্য আপনি এটি ব্যবহার করতে পারেন:

import nltk
words = nltk.word_tokenize(raw_sentence)

এটি বিরাম বিভক্ত করার অতিরিক্ত সুবিধা রয়েছে।

উদাহরণ:

>>> import nltk
>>> s = "The fox's foot grazed the sleeping dog, waking it."
>>> words = nltk.word_tokenize(s)
>>> words
['The', 'fox', "'s", 'foot', 'grazed', 'the', 'sleeping', 'dog', ',', 
'waking', 'it', '.']

এটি আপনাকে চান না এমন কোনও বিরামচিহ্নগুলি ফিল্টার করতে দেয় এবং কেবল শব্দ ব্যবহার করে।

দয়া করে মনে রাখবেন যে string.split()বাক্যগুলির কোনও জটিল ম্যানিপুলেশন করার পরিকল্পনা না রাখলে ব্যবহার করা অন্যান্য সমাধানগুলি আরও ভাল।

[সম্পাদিত]


5
split()বিভাজক হিসাবে সাদা-স্থানের উপর নির্ভর করে, সুতরাং এটি হাইফেনেটেড শব্দগুলিকে পৃথক করতে ব্যর্থ হবে - এবং দীর্ঘ-ড্যাশ পৃথক বাক্যাংশগুলিও বিভক্ত হতে ব্যর্থ হবে। এবং বাক্যটিতে ফাঁকা ছাড়াই কোনও বিরামচিহ্ন থাকলে সেগুলি আটকে থাকতে ব্যর্থ হবে। যেকোন রিয়েল-ওয়ার্ল্ড টেক্সট পার্সিংয়ের জন্য (এই মন্তব্যের জন্য পছন্দ করুন), আপনার এনল্টক পরামর্শ বিভাজন () than এর চেয়ে অনেক ভাল `
hobs

2
সম্ভাব্য কার্যকর, যদিও আমি এটিকে "শব্দ" হিসাবে বিভক্ত হিসাবে চিহ্নিত করব না। কোনও স্পষ্ট ইংরেজী সংজ্ঞা অনুসারে, ','এবং "'s"শব্দ নয়। সাধারণত, যদি আপনি বিরামচিহ্ন-সচেতন উপায়ে বাক্যটিকে "শব্দগুলিতে" বিভক্ত করতে চান, আপনি কমাটি ছড়িয়ে দিতে এবং "fox's"একটি শব্দ হিসাবে পেতে চান ।
মার্ক আমেরিকা

1
পাইথন 2.7+ এপ্রিল 2016. হিসাবে
AnneTheAgile

31

কিভাবে এই অ্যালগরিদম সম্পর্কে? সাদা স্পেসে পাঠ্যকে বিভক্ত করুন, তারপরে বিরামচিহ্নগুলি ছাঁটা করুন। এটি সাবধানে শব্দের প্রান্ত থেকে বিরামচিহ্নগুলি সরিয়ে দেয়, যেমন শব্দের ভিতরে অ্যাডাস্ট্রোফসকে ক্ষতি না করে we're

>>> text
"'Oh, you can't help that,' said the Cat: 'we're all mad here. I'm mad. You're mad.'"

>>> text.split()
["'Oh,", 'you', "can't", 'help', "that,'", 'said', 'the', 'Cat:', "'we're", 'all', 'mad', 'here.', "I'm", 'mad.', "You're", "mad.'"]

>>> import string
>>> [word.strip(string.punctuation) for word in text.split()]
['Oh', 'you', "can't", 'help', 'that', 'said', 'the', 'Cat', "we're", 'all', 'mad', 'here', "I'm", 'mad', "You're", 'mad']

4
দুর্দান্ত, তবে কিছু ইংরাজির শব্দের মধ্যে সত্যিকারের পিছনে বিরামচিহ্ন রয়েছে। উদাহরণস্বরূপ, ট্রেইলিং বিন্দুগুলি e.g.এবং Mrs., এবং অধিকারী frogs'(যেমন হিসাবে frogs' legs) এর মধ্যে চলমান এস্ট্রোফিয়ান শব্দটির অংশ, তবে এই অ্যালগরিদম দ্বারা ছিনিয়ে নেওয়া হবে। পরিচালনা বর্ণমালা সঠিকভাবে করা যায় মোটামুটিভাবে ডট বিভাজিত উদ্যোগসমূহ সনাক্ত প্লাস বিশেষ ক্ষেত্রে (যেমন একটি অভিধান ব্যবহার দ্বারা অর্জিত Mr., Mrs.)। একক উদ্ধৃতি থেকে অধিকারী অ্যাডোস্ট্রোফের পার্থক্য করা নাটকীয়ভাবে শক্ত, কারণ এটি যে বাক্যটিতে রয়েছে তার বাক্যটির ব্যাকরণকে বিশ্লেষণের প্রয়োজন।
মার্ক অ্যামেরি

2
@ মার্ক অ্যামেরি আপনি ঠিক বলেছেন এটি তখন থেকে আমার কাছেও এসেছে যে কিছু বিরাম চিহ্ন যেমন em এম ড্যাশ — শব্দগুলি ফাঁকা ছাড়াই আলাদা করতে পারে।
কর্নেল আতঙ্ক

16

আমি চাই আমার পাইথন ফাংশনটি একটি বাক্য (ইনপুট) বিভক্ত করে প্রতিটি শব্দ একটি তালিকাতে সঞ্চয় করে

str().split()পদ্ধতি এই আছে, এটি একটি স্ট্রিং লাগে, একটি তালিকা সেটিকে splits:

>>> the_string = "this is a sentence"
>>> words = the_string.split(" ")
>>> print(words)
['this', 'is', 'a', 'sentence']
>>> type(words)
<type 'list'> # or <class 'list'> in Python 3.0

টাইপোর কারণে আপনার যে সমস্যা হচ্ছে তা হ'ল print(words)পরিবর্তে আপনি লিখেছেন print(word):

wordভেরিয়েবলটির নামকরণ current_word, এটি আপনার কাছে যা ছিল:

def split_line(text):
    words = text.split()
    for current_word in words:
        print(words)

.. যখন আপনার করা উচিত ছিল:

def split_line(text):
    words = text.split()
    for current_word in words:
        print(current_word)

যদি কোনও কারণে আপনি লুপের জন্য ম্যানুয়ালি একটি তালিকা তৈরি করতে চান, আপনি তালিকা append()পদ্ধতিটি ব্যবহার করতে পারেন , সম্ভবত আপনি সমস্ত শব্দ লোয়ার-কেস করতে চান (উদাহরণস্বরূপ):

my_list = [] # make empty list
for current_word in words:
    my_list.append(current_word.lower())

বা আরও কিছুটা পরিষ্কার, একটি তালিকা-বোঝার ব্যবহার করে :

my_list = [current_word.lower() for current_word in words]

12

shlex একটি .split()ফাংশন আছে। এটি এর থেকে পৃথক str.split()যে এটি উদ্ধৃতি সংরক্ষণ করে না এবং একটি উদ্ধৃত বাক্যাংশকে একটি শব্দ হিসাবে গণ্য করে:

>>> import shlex
>>> shlex.split("sudo echo 'foo && bar'")
['sudo', 'echo', 'foo && bar']

10

আপনি যদি একটি তালিকার কোনও শব্দ / বাক্যটির সমস্ত অক্ষর চান তবে এটি করুন:

print(list("word"))
#  ['w', 'o', 'r', 'd']


print(list("some sentence"))
#  ['s', 'o', 'm', 'e', ' ', 's', 'e', 'n', 't', 'e', 'n', 'c', 'e']

4

আমার মনে হয় আপনি টাইপোর কারণে বিভ্রান্ত হয়ে পড়েছেন।

প্রতিস্থাপন print(words)সঙ্গে print(word)আপনার লুপ ভিতরে প্রতিটি শব্দ একটি ভিন্ন লাইনে মুদ্রিত হয়েছে

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