একই শব্দ দুটি বার রয়েছে এমন স্ট্রিংগুলি সন্ধান করতে হবে


10

আমার মালিকের নাম সহ বৈশিষ্ট্যযুক্ত ডেটা রয়েছে। আমার এমন ডেটা নির্বাচন করতে হবে যাতে শেষ নামটি দু'বার থাকে

উদাহরণস্বরূপ, আমি একটি মালিকের নাম যে সার্চ "থাকতে পারে বেনেট MCCARL & ARNETTE বেনেট "।

আমি বৈশিষ্ট্য সারণীতে যে কোনও সারি নির্বাচন করতে চাই যাতে উপরের উদাহরণের মতো পুনর্বিবেচনা করা শেষ নাম রয়েছে। কেউ কি জানেন যে আমি কীভাবে সেই ডেটা নির্বাচন করতে পারি?


আপনি কোন জিআইএস ব্যবহার করছেন? পাইথন একটি বিকল্প?
হারুন

3
পাইথন প্রশ্নটির জন্য এটি ছড়িয়ে পড়ে যা আমি মনে করি আপনি স্ট্যাক ওভারফ্লোতে গবেষণা / জিজ্ঞাসা করে পাইথন কোডটি পেয়ে যাবেন ।
পলিজিও

1
এটি কি সর্বশেষ নাম বা দুটি ব্যক্তির তালিকা, একজনের নাম বনেট ম্যাককার্ল এবং অন্য আরনেট বেনেট? এটি প্রদর্শিত হয় যে একজনের বেনেটের প্রথম নাম এবং অন্যজনের বেনেটের শেষ নাম রয়েছে?
হারুন

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

1
আমি আপনার প্রশ্নটি স্ট্যাকওভারফ্লো / প্রশ্নগুলি / 35165648/… এ সংশোধন করেছি কারণ এটি "পাইথন-স্পিকার" এর পরিবর্তে "আর্কজিআইএস-স্পোক" তে অঙ্কিত হয়েছিল। আশা করি, আমার সম্পাদনার অনুমোদনের জন্য অপেক্ষা করার সময় এটি খুব বেশি ডাউনওয়েট পাবেন না।
পলিজিও

উত্তর:


2

এই উত্তরের উপর ভিত্তি করে ফিল্ড ক্যালকুলেটর প্রকাশ

def cw(sentence):
 words = sentence.split()
 counts = {}
 nMax=0
 for word in words:
    if word not in counts:counts[word] = 0
    counts[word] += 1
    nMax=max(nMax, counts[word])
 return nMax

'================================================= =

cw( !MUID!)

এটি স্ট্রিংয়ে একই শব্দের সর্বাধিক গণনা প্রদান করবে


8

এটি সম্পাদন করার জন্য আপনি পাইথন সংগ্রহের মডিউল এবং একটি আপডেট কার্সার ব্যবহার করতে পারেন । এই পদ্ধতিটি একটি নতুন ক্ষেত্র যুক্ত করে এবং 1সেখানে কোনও সদৃশ থাকলে তা এটিকে 0পপুলেটে।

import arcpy, collections

shp = r'C:\temp\names.shp'

# Add a field called "check" to store binary data.

arcpy.AddField_management(shp, field_name = "check", field_type = "SHORT")

# Use an Update Cursor to query the table and write to new rows
# 1 = has duplicates
# 0 = no duplicates
with arcpy.da.UpdateCursor(shp, ["last_names", "check"]) as cursor:
    for row in cursor:
        names = row[0].replace("&", "").split() # Clean the string
        counts = collections.Counter(names) #create dictionary to count occurrences of words
        if any(x > 1 for x in list([count for name, count in counts.items()])):
            row[1] = 1
        else:
            row[1] = 0
        cursor.updateRow(row)

এখানে চিত্র বর্ণনা লিখুন


1
এই সংগ্রহগুলি মডিউলটির দুর্দান্ত ব্যবহার, এটি কখনই জানত না যে এটি বিদ্যমান। আমি একই লাইনে চিন্তা করছিলাম তবে একটি পতাকা ক্ষেত্র তৈরি করতে পুনরাবৃত্তি শব্দগুলি বের করতে নিয়মিত অভিব্যক্তি ব্যবহার করছি। আমি মনে করি কাউন্টার ফাংশনটি ব্যবহার করে আপনার দৃষ্টিভঙ্গি বোঝা অনেক সহজ। আমি পরে সেই মডিউলটি পরীক্ষা করে দেখব!
হর্নবিড্ড

6

কি ব্যবহার সম্পর্কে reএবং setpython- এবং সেটিং একটি পতাকা (এখানে 0 এবং 1) reথেকে সমস্ত নামগুলি (শেষ এবং প্রথম) উত্থিত করব BENNETT MCCARL & ARNETTE BENNETTছাড়া &। প্যাটার্ন মিলের reক্ষেত্রে সর্বোচ্চ অগ্রাধিকার দেওয়া হয় - আপনি reকীভাবে ব্যবহার করতে পারেন তা ব্যবহার করতে পারেন।

import re
def sorter(val):
    words = re.findall(r'\w+',val)
    uniques = set(words)
    if len(words)>len(uniques):
        return 1
    else:
        return 0

এবং কল sorter( !N! )


ডেমো


** দেখুন কীভাবে regexশব্দগুলি দখল করেLIVE DEMO

নোট করুন যে এই সমস্ত উত্তরগুলির মধ্যে এই সমস্যাটি মনে করা হয় যে আপনার ডেটা স্যানিটাইজড হয়েছে অর্থাত্ শব্দগুলির মধ্যে যথাযথ স্থান রয়েছে তবে যদি আপনার ডেটা এমন কিছু হয় BENNETTMCCARL&ARNETTEBENNETTতবে এই সমস্ত ব্যর্থ হবে। যে ক্ষেত্রে আপনি ব্যবহার করার প্রয়োজন হতে পারে প্রত্যয় বৃক্ষ অ্যালগরিদম এবং ভাগ্যক্রমে পাইথন কিছু লাইব্রেরি এখানে


রেগেক্স রেসকিউ, দুর্দান্ত!
হর্নবিড্ড

2

আপনার উত্স ডেটাটিকে কোনও জিওডাটাবেস-এর একটি ফিচারক্লাস / সারণী হিসাবে ধরে নিলে নিম্নলিখিত কোয়েরিটি আপনার প্রয়োজনীয় সারিগুলি নির্বাচন করবে:

SUBSTRING(name FROM 1 FOR 7) = 'BENNETT' AND SUBSTRING(name FROM (CHAR_LENGTH(name) - 6) FOR 7) = 'BENNETT

nameক্ষেত্রটি, আমি কেবল এটি কল করতে পেরেছি name। প্রথম অংশটি বাম হাতের দিকটি পরীক্ষা করছে দ্বিতীয় অংশটি ডানদিকে পরীক্ষা করছে। এই ক্যোয়ারীটি অবশ্যই বেনিটটি অনুসন্ধান করার জন্য কঠোরভাবে কোডিং করা হয়েছে, যদি আপনাকে অন্যান্য নাম ব্যবহার করে বাছাই করতে হয় তবে আশা করি আপনি কি পরিবর্তনের প্রয়োজন তা কাজ করতে পারেন?

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