পাইথনের জন্য বিরাম চিহ্নগুলির সম্পূর্ণ সেট (কেবল এএসসিআইআই নয়)


40

এমন কোনও তালিকা বা গ্রন্থাগার রয়েছে যাতে রয়েছে এমন সমস্ত বিরামচিহ্ন যা আমরা সাধারণত দেখতে পাই?

সাধারণত আমি ব্যবহার করি string.punctuationতবে কিছু বিরামচিহ্নগুলি এর মধ্যে অন্তর্ভুক্ত হয় না, উদাহরণস্বরূপ:

>>> "'" in string.punctuation
True
>>> "’" in string.punctuation
False


9
@ অরিস্ট্রিক কোনোটাই নেই।
সামুয়েলব্রডি 1249

উত্তর:


54

আপনি এই চেকটি আরও ভাল করতে পারেন:

>>> import unicodedata
>>> unicodedata.category("'").startswith("P")
True
>>> unicodedata.category("’").startswith("P")
True

ইউনিকোড বিভাগে পি * বিশেষত বিরামচিহ্নের জন্য :

সংযোজক (পিসি), ড্যাশ (পিডি), প্রাথমিক উদ্ধৃতি (পাই), চূড়ান্ত উদ্ধৃতি (পিএফ), খোলা (পিএস), বন্ধ (পিই), অন্যান্য (পো)

পরিপূর্ণ সংগ্রহ প্রস্তুত করতে, যা আপনি পরবর্তী সময়ে দ্রুত সদস্যতা যাচাইয়ের জন্য ব্যবহার করতে পারেন, একটি সেট বোধগম্যতা ব্যবহার করুন:

>>> import sys
>>> from unicodedata import category
>>> codepoints = range(sys.maxunicode + 1)
>>> punctuation = {c for i in codepoints if category(c := chr(i)).startswith("P")}
>>> "'" in punctuation
True
>>> "’" in punctuation
True

পুরানো পাইথন সংস্করণগুলির সমতুল্য এখানে অ্যাসাইনমেন্ট এক্সপ্রেশনটির পাইথন 3.8++ প্রয়োজন:

chrs = (chr(i) for i in range(sys.maxunicode + 1))
punctuation = set(c for c in chrs if category(c).startswith("P"))

সাবধান থাকুন যে অন্য কয়েকটি চরিত্র string.punctuationআসলে ইউনিকোড বিভাগের প্রতীকটিতে রয়েছে । আপনি চাইলে এগুলিতে যুক্ত করাও সহজ।


"বিরামচিহ্ন" এর একটি যুক্তিসঙ্গত সংজ্ঞায় ইউনিকোড "সিম্বল" বিভাগগুলি এসি (মুদ্রা, পছন্দ $), স্ক (সংশোধক, পছন্দ ^), এসএম (গণিত, মত +বা <) এবং সম্ভবত তাই (অন্যান্য, পছন্দ ©) অন্তর্ভুক্ত থাকবে।
dan04

3
@ dan04 উত্তরের শেষ প্যারাটি এটিই উল্লেখ করছে। অবশ্যই অন্যরা নিজের ব্যবহারের ক্ষেত্রে নির্ভর করে বিভাগগুলি অন্তর্ভুক্ত / বাদ দিতে এই কোডটি মানিয়ে নিতে পারে।
wim 19

16

উইম দ্বারা পোস্ট করা উত্তরটি সঠিক যদি আপনি কোনও অক্ষর বিরামচিহ্ন অক্ষর কিনা তা পরীক্ষা করতে চান।

আপনার প্রশ্নের শিরোনামের পরামর্শ অনুসারে যদি আপনার সত্যিকারের সমস্ত বিরামচিহ্নের অক্ষরের একটি তালিকা প্রয়োজন হয় তবে আপনি নিম্নলিখিতগুলি ব্যবহার করতে পারেন:

import sys
from unicodedata import category
punctuation_chars =  [chr(i) for i in range(sys.maxunicode) 
                             if category(chr(i)).startswith("P")]

2

উইম দ্বারা উত্তরটি দুর্দান্ত যদি আপনি কোনও ফাংশন ব্যবহার করতে আপনার কোড পরিবর্তন করতে পারেন।

তবে যদি আপনাকে inঅপারেটরটি ব্যবহার করতে হয় (উদাহরণস্বরূপ, আপনি লাইব্রেরি কোডে কল করছেন), আপনি হাঁসের টাইপিং ব্যবহার করতে পারেন:

import unicodedata
class DuckType:
    def __contains__(self,s):
        return unicodedata.category(s).startswith("P")
punct=DuckType()
#print("'" in punct,'"' in punct,"a" in punct)

1

এটি নিয়মিত এক্সপ্রেশন (রিজেক্সপ) এর জন্য সুন্দর কাজের মতো মনে হচ্ছে:

    import re
    text = re.sub(r"[^\w\s]", "", str(text), flags=re.UNICODE)

এখানে, রেজিএক্সপ্রেট সাদা শব্দ বা শব্দের অক্ষর বাদে সমস্ত কিছুর সাথে মিলছে। পতাকাটি re.UNICODEইউনিকোডের পুরো অক্ষরের পুরো সেটটির সাথে মিলতে ব্যবহৃত হয়।


বহু ভাষার সাথে কাজ করে না:>>> text="Den som dræber - fanget" >>> re.sub(r"[^\w\s]", "", str(text), flags=re.UNICODE) 'Den som dr\xc3ber fanget'
সামুয়েলব্রডি 1249

1
@ samuelbrody1249 আপনার অর্থ কি এটি কাজ করে না? এটি আপনার উদাহরণে কাজ করে ( \xc3পলায়ন হ'ল বিরামচিহ্নের সাথে সম্পর্কিত নয়) escape
লেনজ

1
@lenz \xc3সঠিক ইউনিকোড এনকোডিং নয় æ; আপনি যদি টাইপ করেন তবে str(text)নিশ্চিত করতে পারবেন যে এটি \xc3\xa6। আসলে \xc3এটি একটি সম্পূর্ণ কোডপয়েন্ট হিসাবে মনে হয় না।
ফেডেরিকো পোলোনি

6
আচ্ছা বুঝলাম. দেখে মনে হচ্ছে আপনি দুজন পাইথন 2 ব্যবহার করছেন, যেখানে strবাইট স্ট্রিং রয়েছে। আপনার অবশ্যই পাইথন 3 এ স্যুইচ করা উচিত, কারণ ইউনিকোড পাই 2-এ একটি দুঃস্বপ্ন। আমার জন্য, str('æ')হিসাবে দেখায় 'æ'এবং ascii('æ')হিসাবে দেখায় '\xe6'যা সঠিক কোডপয়েন্ট। b'\xc3\xa6'এটি ইউটিএফ -8 এনকোডিং 'æ', তবে এটি সাধারণত আপনি কাজ করতে চান তা নয়।
লেনজ

0

অন্যান্য উত্তরগুলি যেমন উল্লেখ করেছে, এটি করার উপায়টি ইউনিকোড বৈশিষ্ট্য / বিভাগগুলির মাধ্যমে। স্বীকৃত উত্তরটি স্ট্যান্ডার্ড লাইব্রেরি unicodedataমডিউলটির মাধ্যমে এই তথ্যটি অ্যাক্সেস করে , তবে আপনার যেখানে প্রয়োজন তার প্রেক্ষাপটে, নিয়মিত প্রকাশগুলি ব্যবহার করে এই একই সম্পত্তি তথ্য অ্যাক্সেস করা দ্রুত বা আরও বেশি সুবিধাজনক হতে পারে।

তবে মানক পাঠাগার reমডিউলটি প্রসারিত ইউনিকোড সমর্থন সরবরাহ করে না not তার জন্য, আপনার পিডিআইআইতে উপলব্ধ regexমডিউলটি দরকার pip install regex:

>>> import regex as re
>>> re.match("\p{Punctuation}", "'")
<regex.Match object; span=(0, 1), match="'">
>>> re.match("\p{Punctuation}", "’")
<regex.Match object; span=(0, 1), match='’'>

আপনি নিয়মিত ভাব প্রকাশের জন্য অনুসন্ধান করতে পারেন এমন বিভিন্ন ধরণের ইউনিকোড বৈশিষ্ট্যের একটি ভাল ওভারভিউ এখানে সরবরাহ করা হয়েছে । এই পিআইপিআই হোমপেজে নথিভুক্ত অতিরিক্ত অতিরিক্ত নিয়মিত এক্সপ্রেশন বৈশিষ্ট্যগুলি ছাড়াও, regexইচ্ছাকৃতভাবে একই এপিআই সরবরাহ করে re, যাতে আপনি সেগুলির কোনওটি reকীভাবে ব্যবহার করবেন তা নির্ধারণ করার জন্য আপনার ডকুমেন্টেশন ব্যবহার করার আশা করা হচ্ছে ।

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