Spaces:
Running
Running
Yufan_Zhou commited on
Commit ·
0701598
1
Parent(s): 40c05c4
Fix imports, add generate_user_profile_final, and clean up old directories
Browse files- app.py +1 -1
- deepsite +0 -1
- generate_user_profile/output/all_profile_40.json +0 -7
- {generation_user_profile → generate_user_profile_final}/code/__init__.py +0 -0
- {generation_user_profile → generate_user_profile_final}/code/based_data.py +62 -105
- {generation_user_profile → generate_user_profile_final}/code/config.py +0 -0
- generate_user_profile_final/code/count_nodes.py +139 -0
- generation_user_profile/code/generate_profile.py → generate_user_profile_final/code/generate_profile_ind.py +414 -308
- generate_user_profile_final/code/read_profile_summaries.py +134 -0
- {generation_user_profile → generate_user_profile_final}/code/select_attributes.py +89 -150
- {generation_user_profile → generate_user_profile_final}/code/web_api_bridge.py +48 -30
- {generation_user_profile → generate_user_profile_final}/data/occupations_english.json +0 -0
- generation_user_profile/code/data/100.json +0 -395
- generation_user_profile/code/data/attribute_embeddings.pkl +0 -3
- generation_user_profile/code/data/attributes_merged.json +0 -0
- generation_user_profile/code/data/large_attributes copy.json +0 -0
- generation_user_profile/code/data/large_attributes.json +0 -67
- generation_user_profile/code/data/occupations_english copy.json +0 -933
- generation_user_profile/code/data/occupations_english.json +0 -42
- generation_user_profile/code/output/new_user_profiles.json +0 -39
- generation_user_profile/code/temp_input.json +0 -17
- generation_user_profile/data/100.json +0 -395
- generation_user_profile/data/attribute_embeddings.pkl +0 -3
- generation_user_profile/data/attributes_merged.json +0 -0
- generation_user_profile/data/large_attributes.json +0 -0
- generation_user_profile/output/selected_paths.json +0 -898
- generation_user_profile/output/user_profile.json +0 -383
app.py
CHANGED
|
@@ -14,7 +14,7 @@ os.environ.pop('HTTPS_PROXY', None)
|
|
| 14 |
current_dir = Path(__file__).parent
|
| 15 |
# Use the improved generation method from generate_user_profile_final
|
| 16 |
code_dir = current_dir / "generate_user_profile_final" / "code"
|
| 17 |
-
sys.path.
|
| 18 |
|
| 19 |
# Import necessary modules
|
| 20 |
from web_api_bridge import generate_profile_from_input
|
|
|
|
| 14 |
current_dir = Path(__file__).parent
|
| 15 |
# Use the improved generation method from generate_user_profile_final
|
| 16 |
code_dir = current_dir / "generate_user_profile_final" / "code"
|
| 17 |
+
sys.path.insert(0, str(code_dir))
|
| 18 |
|
| 19 |
# Import necessary modules
|
| 20 |
from web_api_bridge import generate_profile_from_input
|
deepsite
DELETED
|
@@ -1 +0,0 @@
|
|
| 1 |
-
Subproject commit deccc784affba25b019ac02bd54c4899a9eaa86f
|
|
|
|
|
|
generate_user_profile/output/all_profile_40.json
DELETED
|
@@ -1,7 +0,0 @@
|
|
| 1 |
-
{
|
| 2 |
-
"metadata": {
|
| 3 |
-
"profiles_completed": 0,
|
| 4 |
-
"total_profiles": 40,
|
| 5 |
-
"description": "包含40个用户档案的集合"
|
| 6 |
-
}
|
| 7 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
{generation_user_profile → generate_user_profile_final}/code/__init__.py
RENAMED
|
File without changes
|
{generation_user_profile → generate_user_profile_final}/code/based_data.py
RENAMED
|
@@ -31,7 +31,9 @@ def get_occupations() -> List[str]:
|
|
| 31 |
return _occupations_cache
|
| 32 |
|
| 33 |
try:
|
| 34 |
-
|
|
|
|
|
|
|
| 35 |
with open(file_path, 'r', encoding='utf-8') as f:
|
| 36 |
_occupations_cache = json.load(f)
|
| 37 |
return _occupations_cache
|
|
@@ -151,35 +153,34 @@ def generate_career_info(age: int) -> Dict[str, str]:
|
|
| 151 |
|
| 152 |
def generate_location() -> Dict[str, str]:
|
| 153 |
"""
|
| 154 |
-
生成
|
| 155 |
|
| 156 |
Returns
|
| 157 |
-------
|
| 158 |
Dict[str, str]
|
| 159 |
-
- country :
|
| 160 |
-
- city :
|
| 161 |
"""
|
| 162 |
gc = GeonamesCache()
|
| 163 |
|
| 164 |
-
# ---- 固定
|
| 165 |
-
country_code = "
|
| 166 |
countries = gc.get_countries()
|
| 167 |
-
country
|
| 168 |
|
| 169 |
-
# ---- 过滤出
|
| 170 |
-
cities
|
| 171 |
-
|
| 172 |
city for city in cities.values()
|
| 173 |
if city["countrycode"] == country_code
|
| 174 |
]
|
| 175 |
|
| 176 |
-
# ---- 若
|
| 177 |
-
if not
|
| 178 |
-
return {"country": "
|
| 179 |
|
| 180 |
# ---- 随机选择一个城市 ----
|
| 181 |
-
city_data = random.choice(
|
| 182 |
-
|
| 183 |
return {"country": country["name"], "city": city_data["name"]}
|
| 184 |
|
| 185 |
|
|
@@ -207,26 +208,14 @@ def generate_personal_values(age: int, gender: str, occupation: str, location: D
|
|
| 207 |
value_type = random.choice(['positive', 'negative', 'neutral'])
|
| 208 |
|
| 209 |
prompt = f"""
|
| 210 |
-
Generate a
|
| 211 |
-
|
| 212 |
-
- Gender: {gender}
|
| 213 |
-
- Occupation: {occupation}
|
| 214 |
-
- Location: {location['city']}, {location['country']}
|
| 215 |
-
|
| 216 |
-
The value system's tone should be primarily **{value_type.upper()}**.
|
| 217 |
-
- For **POSITIVE** values, the belief system should be oriented towards principles of growth, connection, optimism, or benevolence.
|
| 218 |
-
- For **NEGATIVE** values, the belief system should be oriented towards principles of cynicism, pessimism, selfishness, or nihilism.
|
| 219 |
-
- For **NEUTRAL** values, the belief system should be oriented towards principles of pragmatism, stoicism, individualism, or detached observation.
|
| 220 |
-
|
| 221 |
-
The generated phrase must describe a belief system that is **internally coherent**. It can either align with or contrast against the person's background.
|
| 222 |
-
|
| 223 |
-
**EXTREMELY IMPORTANT CONSTRAINT:**
|
| 224 |
-
The value system MUST be centered on the individual's internal world, personal principles, or their relationship with abstract concepts like fate, nature, work, or self. It **MUST NOT**, under any circumstances, be about their relationship with a local community, neighborhood, social groups, or collective social identity. Any response focused on community is considered a failure.
|
| 225 |
|
| 226 |
-
|
| 227 |
|
| 228 |
-
|
| 229 |
|
|
|
|
| 230 |
{{
|
| 231 |
"values_orientation": "short phrase describing their values"
|
| 232 |
}}
|
|
@@ -282,34 +271,27 @@ def generate_life_attitude(age: int = None, gender: str = None, occupation: str
|
|
| 282 |
|
| 283 |
# 创建提示词
|
| 284 |
prompt = f"""
|
| 285 |
-
Generate
|
| 286 |
-
|
| 287 |
-
|
| 288 |
-
|
| 289 |
-
|
| 290 |
-
|
| 291 |
-
|
| 292 |
-
|
| 293 |
-
|
| 294 |
-
|
| 295 |
-
|
| 296 |
-
|
| 297 |
-
|
| 298 |
-
|
| 299 |
-
|
| 300 |
-
|
| 301 |
-
|
| 302 |
-
|
| 303 |
-
|
| 304 |
-
|
| 305 |
-
|
| 306 |
-
"attitude": "single sentence",
|
| 307 |
-
"attitude_details": "single sentence",
|
| 308 |
-
"coping_mechanism": "single sentence"
|
| 309 |
-
}}
|
| 310 |
-
|
| 311 |
-
DO NOT include any text before or after the JSON. The response must be parseable by json.loads().
|
| 312 |
-
"""
|
| 313 |
|
| 314 |
messages = [
|
| 315 |
{"role": "system", "content": "You are an assistant that generates realistic human life attitudes in ONE SENTENCE, including positive, neutral, and negative outlooks. You ALWAYS respond with valid JSON objects that can be parsed by json.loads()."},
|
|
@@ -350,10 +332,10 @@ DO NOT include any text before or after the JSON. The response must be parseable
|
|
| 350 |
}
|
| 351 |
|
| 352 |
def generate_personal_story(age: int, gender: str, occupation: str, location: Dict[str, str],
|
| 353 |
-
values_orientation: str, life_attitude: Dict[str, str]) -> Dict[str,
|
| 354 |
"""根据人物的基本信息生成个人故事。
|
| 355 |
|
| 356 |
-
使用GPT根据年龄、性别、职业、地区、价值观和生活态度生成一个人物的详细故事
|
| 357 |
故事可以包含各种正面或负面的经历,包括极端情况。
|
| 358 |
|
| 359 |
Args:
|
|
@@ -367,7 +349,6 @@ def generate_personal_story(age: int, gender: str, occupation: str, location: Di
|
|
| 367 |
Returns:
|
| 368 |
Dict: 包含以下字段的字典:
|
| 369 |
- personal_story: 个人故事描述
|
| 370 |
-
- key_life_events: 关键生活事件列表
|
| 371 |
"""
|
| 372 |
# 提取生活态度信息
|
| 373 |
attitude = life_attitude.get("attitude", "")
|
|
@@ -387,14 +368,12 @@ def generate_personal_story(age: int, gender: str, occupation: str, location: Di
|
|
| 387 |
Core Values: {values_orientation}
|
| 388 |
Life Attitude: {attitude} ({attitude_category})
|
| 389 |
|
| 390 |
-
IMPORTANT: The story can be positive, negative, or a mix of both. Please do not avoid including life experiences that may be controversial or have negative consequences. The narration should be as specific as possible, objective, and free from any subjective comments or value judgments. This could be a random event unrelated to the background, or a significant turning point in their life. Please avoid including anything related to community building.
|
| 391 |
|
| 392 |
-
Please provide
|
| 393 |
-
1. {num_stories} brief personal stories (each 100-150 words) that explain different aspects of how this person became who they are today
|
| 394 |
-
2. 1-2 key life events for each story (with approximate ages when they occurred)
|
| 395 |
|
| 396 |
CRITICAL: You must format your response EXACTLY as a valid JSON object with this structure:
|
| 397 |
-
{{"personal_stories": ["story 1", "story 2", ...]
|
| 398 |
|
| 399 |
DO NOT include any text before or after the JSON. The response must be parseable by json.loads().
|
| 400 |
"""
|
|
@@ -406,50 +385,32 @@ def generate_personal_story(age: int, gender: str, occupation: str, location: Di
|
|
| 406 |
try:
|
| 407 |
response = get_completion(messages, temperature=0.8)
|
| 408 |
|
| 409 |
-
# 解析JSON响应,只
|
| 410 |
result = parse_gpt_response(
|
| 411 |
response,
|
| 412 |
-
expected_fields=["personal_stories"
|
| 413 |
field_defaults={
|
| 414 |
-
"personal_stories": []
|
| 415 |
-
"key_life_events": [[]]
|
| 416 |
}
|
| 417 |
)
|
| 418 |
|
| 419 |
# 处理多故事格式
|
| 420 |
stories = result["personal_stories"]
|
| 421 |
-
events = result["key_life_events"]
|
| 422 |
|
| 423 |
# 确保有数据
|
| 424 |
-
if not stories
|
| 425 |
-
raise ValueError("Failed to generate personal stories
|
| 426 |
|
| 427 |
# 将多故事格式转换为统一的格式
|
| 428 |
# 将所有故事连接起来,用分隔符隔开
|
| 429 |
combined_story = "\n\n".join([f"Story {i+1}: {story}" for i, story in enumerate(stories)])
|
| 430 |
|
| 431 |
-
# 将所有事件展平并标记每个故事的事件
|
| 432 |
-
all_events = []
|
| 433 |
-
for i, event_group in enumerate(events):
|
| 434 |
-
for event in event_group:
|
| 435 |
-
all_events.append(f"Story {i+1}: {event}")
|
| 436 |
-
|
| 437 |
-
# 如果没有事件,添加一个默认事件
|
| 438 |
-
if not all_events:
|
| 439 |
-
all_events = ["Story 1: Significant life event"]
|
| 440 |
-
|
| 441 |
return {
|
| 442 |
-
"personal_story": combined_story
|
| 443 |
-
"key_life_events": all_events
|
| 444 |
}
|
| 445 |
except Exception as e:
|
| 446 |
-
print(f"\nError in
|
| 447 |
raise
|
| 448 |
-
|
| 449 |
-
return {
|
| 450 |
-
"personal_story": combined_story,
|
| 451 |
-
"key_life_events": all_events
|
| 452 |
-
}
|
| 453 |
|
| 454 |
def generate_interests_and_hobbies(personal_story: Dict[str, Any]) -> Dict[str, Any]:
|
| 455 |
"""根据人物的故事生成兴趣爱好列表。
|
|
@@ -475,21 +436,17 @@ def generate_interests_and_hobbies(personal_story: Dict[str, Any]) -> Dict[str,
|
|
| 475 |
|
| 476 |
# 创建提示词
|
| 477 |
prompt = f"""
|
| 478 |
-
|
|
|
|
|
|
|
| 479 |
|
| 480 |
-
|
| 481 |
-
|
|
|
|
| 482 |
|
| 483 |
-
|
| 484 |
-
1. **Infer, do not extract.** The interests should be logical deductions from the story, not words pulled directly from the text.
|
| 485 |
-
2. **Embrace complexity.** The interests can be positive (e.g., painting), negative (e.g., chain smoking), or neutral. Non-traditional or unexpected interests are encouraged if they fit the character's psychology.
|
| 486 |
-
3. **Ensure solitude.** Per critical instructions, the inferred interests MUST be solitary activities and not related to community-building.
|
| 487 |
-
4. **Be descriptive.** Each interest should be a short, descriptive phrase (around 3-5 words).
|
| 488 |
-
|
| 489 |
-
**CRITICAL:** You must format your response EXACTLY as a valid JSON object with this structure:
|
| 490 |
-
{{
|
| 491 |
"interests": ["interest1", "interest2"]
|
| 492 |
-
|
| 493 |
|
| 494 |
DO NOT include any text before or after the JSON. The response must be parseable by json.loads().
|
| 495 |
"""
|
|
|
|
| 31 |
return _occupations_cache
|
| 32 |
|
| 33 |
try:
|
| 34 |
+
# 修改路径,使用项目根目录下的data文件夹
|
| 35 |
+
project_root = os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))
|
| 36 |
+
file_path = os.path.join(project_root, 'data', 'occupations_english.json')
|
| 37 |
with open(file_path, 'r', encoding='utf-8') as f:
|
| 38 |
_occupations_cache = json.load(f)
|
| 39 |
return _occupations_cache
|
|
|
|
| 153 |
|
| 154 |
def generate_location() -> Dict[str, str]:
|
| 155 |
"""
|
| 156 |
+
生成印度随机城市的地理位置信息。
|
| 157 |
|
| 158 |
Returns
|
| 159 |
-------
|
| 160 |
Dict[str, str]
|
| 161 |
+
- country : 始终为 "India"
|
| 162 |
+
- city : 随机城市名
|
| 163 |
"""
|
| 164 |
gc = GeonamesCache()
|
| 165 |
|
| 166 |
+
# ---- 固定国家为印度 ----
|
| 167 |
+
country_code = "IN"
|
| 168 |
countries = gc.get_countries()
|
| 169 |
+
country = countries[country_code]
|
| 170 |
|
| 171 |
+
# ---- 过滤出印度的所有城市 ----
|
| 172 |
+
cities = gc.get_cities()
|
| 173 |
+
in_cities_list = [
|
| 174 |
city for city in cities.values()
|
| 175 |
if city["countrycode"] == country_code
|
| 176 |
]
|
| 177 |
|
| 178 |
+
# ---- 若意外无数据,兼底处理 ----
|
| 179 |
+
if not in_cities_list:
|
| 180 |
+
return {"country": country["name"], "city": "Mumbai"}
|
| 181 |
|
| 182 |
# ---- 随机选择一个城市 ----
|
| 183 |
+
city_data = random.choice(in_cities_list)
|
|
|
|
| 184 |
return {"country": country["name"], "city": city_data["name"]}
|
| 185 |
|
| 186 |
|
|
|
|
| 208 |
value_type = random.choice(['positive', 'negative', 'neutral'])
|
| 209 |
|
| 210 |
prompt = f"""
|
| 211 |
+
Generate a concise description of a person's core values and belief system based on:
|
| 212 |
+
Age: {age}, Gender: {gender}, Occupation: {occupation}, Location: {location['city']}, {location['country']}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 213 |
|
| 214 |
+
IMPORTANT: This person has a {value_type.upper()} value system. Their values may be entirely consistent with their personal background or may conflict with it. Avoid introducing unnecessary contrasts or contradictions in their beliefs. Try to avoid being related to the community as much as possible. Avoid using words with similar meanings to ‘balance’ and ‘balance’.
|
| 215 |
|
| 216 |
+
Please generate a short phrase that clearly captures the essence of this person's core values and beliefs without adding conflicting ideas or turnarounds.
|
| 217 |
|
| 218 |
+
CRITICAL: You must format your response EXACTLY as a valid JSON object with this structure:
|
| 219 |
{{
|
| 220 |
"values_orientation": "short phrase describing their values"
|
| 221 |
}}
|
|
|
|
| 271 |
|
| 272 |
# 创建提示词
|
| 273 |
prompt = f"""
|
| 274 |
+
Generate specific attributes about a person's life attitude based on the following information:
|
| 275 |
+
|
| 276 |
+
Age: {age}
|
| 277 |
+
Gender: {gender}
|
| 278 |
+
Occupation: {occupation}
|
| 279 |
+
Location: {location['city']}, {location['country']}
|
| 280 |
+
Core Values: {values_orientation}
|
| 281 |
+
|
| 282 |
+
IMPORTANT: This person's attitude toward life can be positive, neutral, or negative. In a negative state, they may hold a pessimistic, cynical, or even nihilistic view of life. Avoid involving concepts such as community or balance. Avoid using words with similar meanings to ‘balance’ and ‘balance’.
|
| 283 |
+
|
| 284 |
+
I need you to generate ONLY the following specific attributes, each expressed as a single sentence:
|
| 285 |
+
|
| 286 |
+
1. attitude: A single, concise sentence (5-10 words) describing their overall life attitude
|
| 287 |
+
2. attitude_details: A single sentence (15-20 words) explaining how this attitude manifests in their daily life
|
| 288 |
+
3. coping_mechanism: A single sentence (5-10 words) describing how they deal with challenges
|
| 289 |
+
|
| 290 |
+
CRITICAL: You must format your response EXACTLY as a valid JSON object with this structure:
|
| 291 |
+
{{"attitude": "single sentence", "attitude_details": "single sentence", "coping_mechanism": "single sentence"}}
|
| 292 |
+
|
| 293 |
+
DO NOT include any text before or after the JSON. The response must be parseable by json.loads().
|
| 294 |
+
"""
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 295 |
|
| 296 |
messages = [
|
| 297 |
{"role": "system", "content": "You are an assistant that generates realistic human life attitudes in ONE SENTENCE, including positive, neutral, and negative outlooks. You ALWAYS respond with valid JSON objects that can be parsed by json.loads()."},
|
|
|
|
| 332 |
}
|
| 333 |
|
| 334 |
def generate_personal_story(age: int, gender: str, occupation: str, location: Dict[str, str],
|
| 335 |
+
values_orientation: str, life_attitude: Dict[str, str]) -> Dict[str, str]:
|
| 336 |
"""根据人物的基本信息生成个人故事。
|
| 337 |
|
| 338 |
+
使用GPT根据年龄、性别、职业、地区、价值观和生活态度生成一个人物的详细故事。
|
| 339 |
故事可以包含各种正面或负面的经历,包括极端情况。
|
| 340 |
|
| 341 |
Args:
|
|
|
|
| 349 |
Returns:
|
| 350 |
Dict: 包含以下字段的字典:
|
| 351 |
- personal_story: 个人故事描述
|
|
|
|
| 352 |
"""
|
| 353 |
# 提取生活态度信息
|
| 354 |
attitude = life_attitude.get("attitude", "")
|
|
|
|
| 368 |
Core Values: {values_orientation}
|
| 369 |
Life Attitude: {attitude} ({attitude_category})
|
| 370 |
|
| 371 |
+
IMPORTANT: The story can be positive, negative, or a mix of both. Please do not avoid including life experiences that may be controversial or have negative consequences. The narration should be as specific as possible, objective, and free from any subjective comments or value judgments. The stories that unfold should be closely related to their country and region, reflecting events that could genuinely happen to the people there. This could be a random event unrelated to the background, or a significant turning point in their life. Please avoid including anything related to community building.
|
| 372 |
|
| 373 |
+
Please provide {num_stories} brief personal stories (each 150-200 words).
|
|
|
|
|
|
|
| 374 |
|
| 375 |
CRITICAL: You must format your response EXACTLY as a valid JSON object with this structure:
|
| 376 |
+
{{"personal_stories": ["story 1", "story 2", ...]}}
|
| 377 |
|
| 378 |
DO NOT include any text before or after the JSON. The response must be parseable by json.loads().
|
| 379 |
"""
|
|
|
|
| 385 |
try:
|
| 386 |
response = get_completion(messages, temperature=0.8)
|
| 387 |
|
| 388 |
+
# 解析JSON响应,只获取个人故事
|
| 389 |
result = parse_gpt_response(
|
| 390 |
response,
|
| 391 |
+
expected_fields=["personal_stories"],
|
| 392 |
field_defaults={
|
| 393 |
+
"personal_stories": []
|
|
|
|
| 394 |
}
|
| 395 |
)
|
| 396 |
|
| 397 |
# 处理多故事格式
|
| 398 |
stories = result["personal_stories"]
|
|
|
|
| 399 |
|
| 400 |
# 确保有数据
|
| 401 |
+
if not stories:
|
| 402 |
+
raise ValueError("Failed to generate personal stories")
|
| 403 |
|
| 404 |
# 将多故事格式转换为统一的格式
|
| 405 |
# 将所有故事连接起来,用分隔符隔开
|
| 406 |
combined_story = "\n\n".join([f"Story {i+1}: {story}" for i, story in enumerate(stories)])
|
| 407 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 408 |
return {
|
| 409 |
+
"personal_story": combined_story
|
|
|
|
| 410 |
}
|
| 411 |
except Exception as e:
|
| 412 |
+
print(f"\nError in generate_personal_story: {e}")
|
| 413 |
raise
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 414 |
|
| 415 |
def generate_interests_and_hobbies(personal_story: Dict[str, Any]) -> Dict[str, Any]:
|
| 416 |
"""根据人物的故事生成兴趣爱好列表。
|
|
|
|
| 436 |
|
| 437 |
# 创建提示词
|
| 438 |
prompt = f"""
|
| 439 |
+
Based on the following personal story and key life events, infer two to three hobbies or interests this person might use to relax. These activities can be positive or negative and may include non-traditional, controversial, or unexpected ones, such as various sports, traveling, or even smoking, drinking, or using marijuana. Please make inferences about the person’s possible interests based on the story, rather than simply extracting them directly from the story.
|
| 440 |
+
|
| 441 |
+
Personal Story: {story_text}
|
| 442 |
|
| 443 |
+
IMPORTANT: Avoid including anything related to community-building activities.
|
| 444 |
+
|
| 445 |
+
Please extract 2 hobbies or interests based on these reflections and format your response as a JSON object:
|
| 446 |
|
| 447 |
+
{{
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 448 |
"interests": ["interest1", "interest2"]
|
| 449 |
+
}}
|
| 450 |
|
| 451 |
DO NOT include any text before or after the JSON. The response must be parseable by json.loads().
|
| 452 |
"""
|
{generation_user_profile → generate_user_profile_final}/code/config.py
RENAMED
|
File without changes
|
generate_user_profile_final/code/count_nodes.py
ADDED
|
@@ -0,0 +1,139 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
#!/usr/bin/env python3
|
| 2 |
+
"""
|
| 3 |
+
统计 attributes_merged.json 文件中的节点数量
|
| 4 |
+
|
| 5 |
+
该脚本递归遍历 JSON 文件中的所有嵌套结构,统计所有的键(节点)数量。
|
| 6 |
+
每个键都被视为一个节点,无论其值是空对象还是包含更多嵌套结构的对象。
|
| 7 |
+
"""
|
| 8 |
+
|
| 9 |
+
import json
|
| 10 |
+
import os
|
| 11 |
+
|
| 12 |
+
|
| 13 |
+
def count_nodes_recursive(data):
|
| 14 |
+
"""
|
| 15 |
+
递归统计 JSON 对象中的节点数量
|
| 16 |
+
|
| 17 |
+
Args:
|
| 18 |
+
data: JSON 对象(字典或其他数据类型)
|
| 19 |
+
|
| 20 |
+
Returns:
|
| 21 |
+
int: 节点总数
|
| 22 |
+
"""
|
| 23 |
+
if not isinstance(data, dict):
|
| 24 |
+
return 0
|
| 25 |
+
|
| 26 |
+
count = 0
|
| 27 |
+
for key, value in data.items():
|
| 28 |
+
# 每个键都算作一个节点
|
| 29 |
+
count += 1
|
| 30 |
+
# 如果值是字典,递归统计其中的节点
|
| 31 |
+
if isinstance(value, dict):
|
| 32 |
+
count += count_nodes_recursive(value)
|
| 33 |
+
|
| 34 |
+
return count
|
| 35 |
+
|
| 36 |
+
|
| 37 |
+
def analyze_json_structure(data, level=0, max_display_level=3):
|
| 38 |
+
"""
|
| 39 |
+
分析并显示 JSON 结构的层次信息
|
| 40 |
+
|
| 41 |
+
Args:
|
| 42 |
+
data: JSON 对象
|
| 43 |
+
level: 当前层级
|
| 44 |
+
max_display_level: 最大显示层级
|
| 45 |
+
|
| 46 |
+
Returns:
|
| 47 |
+
dict: 包含统计信息的字典
|
| 48 |
+
"""
|
| 49 |
+
if not isinstance(data, dict):
|
| 50 |
+
return {"nodes": 0, "levels": 0, "leaf_nodes": 0}
|
| 51 |
+
|
| 52 |
+
stats = {"nodes": 0, "levels": level + 1, "leaf_nodes": 0}
|
| 53 |
+
|
| 54 |
+
for key, value in data.items():
|
| 55 |
+
stats["nodes"] += 1
|
| 56 |
+
|
| 57 |
+
if level < max_display_level:
|
| 58 |
+
indent = " " * level
|
| 59 |
+
print(f"{indent}- {key}")
|
| 60 |
+
|
| 61 |
+
if isinstance(value, dict):
|
| 62 |
+
if len(value) == 0:
|
| 63 |
+
# 空字典视为叶子节点
|
| 64 |
+
stats["leaf_nodes"] += 1
|
| 65 |
+
else:
|
| 66 |
+
# 递归分析子结构
|
| 67 |
+
sub_stats = analyze_json_structure(value, level + 1, max_display_level)
|
| 68 |
+
stats["nodes"] += sub_stats["nodes"]
|
| 69 |
+
stats["levels"] = max(stats["levels"], sub_stats["levels"])
|
| 70 |
+
stats["leaf_nodes"] += sub_stats["leaf_nodes"]
|
| 71 |
+
else:
|
| 72 |
+
# 非字典值视为叶子节点
|
| 73 |
+
stats["leaf_nodes"] += 1
|
| 74 |
+
|
| 75 |
+
return stats
|
| 76 |
+
|
| 77 |
+
|
| 78 |
+
def main():
|
| 79 |
+
"""主函数"""
|
| 80 |
+
file_path = "/home/zhou/deeppersona/generate_user_profile_final/data/attributes_merged.json"
|
| 81 |
+
|
| 82 |
+
# 检查文件是否存在
|
| 83 |
+
if not os.path.exists(file_path):
|
| 84 |
+
print(f"错误: 文件 {file_path} 不存在")
|
| 85 |
+
return
|
| 86 |
+
|
| 87 |
+
try:
|
| 88 |
+
# 读取 JSON 文件
|
| 89 |
+
print(f"正在读取文件: {file_path}")
|
| 90 |
+
with open(file_path, 'r', encoding='utf-8') as f:
|
| 91 |
+
data = json.load(f)
|
| 92 |
+
|
| 93 |
+
print("=" * 60)
|
| 94 |
+
print("JSON 文件节点统计结果")
|
| 95 |
+
print("=" * 60)
|
| 96 |
+
|
| 97 |
+
# 统计总节点数
|
| 98 |
+
total_nodes = count_nodes_recursive(data)
|
| 99 |
+
print(f"总节点数量: {total_nodes}")
|
| 100 |
+
|
| 101 |
+
# 详细结构分析
|
| 102 |
+
print("\n" + "=" * 60)
|
| 103 |
+
print("结构分析")
|
| 104 |
+
print("=" * 60)
|
| 105 |
+
|
| 106 |
+
print("\n前3层结构预览:")
|
| 107 |
+
print("-" * 30)
|
| 108 |
+
stats = analyze_json_structure(data)
|
| 109 |
+
|
| 110 |
+
print(f"\n详细统计信息:")
|
| 111 |
+
print(f"- 总节点数: {stats['nodes']}")
|
| 112 |
+
print(f"- 最大层级深度: {stats['levels']}")
|
| 113 |
+
print(f"- 叶子节点数: {stats['leaf_nodes']}")
|
| 114 |
+
print(f"- 中间节点数: {stats['nodes'] - stats['leaf_nodes']}")
|
| 115 |
+
|
| 116 |
+
# 计算文件大小
|
| 117 |
+
file_size = os.path.getsize(file_path)
|
| 118 |
+
print(f"\n文件信息:")
|
| 119 |
+
print(f"- 文件大小: {file_size:,} 字节 ({file_size/1024:.2f} KB)")
|
| 120 |
+
print(f"- 平均每个节点: {file_size/total_nodes:.2f} 字节")
|
| 121 |
+
|
| 122 |
+
# 顶层分类统计
|
| 123 |
+
if isinstance(data, dict):
|
| 124 |
+
print(f"\n顶层分类数量: {len(data)}")
|
| 125 |
+
print("顶层分类列表:")
|
| 126 |
+
for i, key in enumerate(data.keys(), 1):
|
| 127 |
+
sub_count = count_nodes_recursive(data[key])
|
| 128 |
+
print(f" {i:2d}. {key}: {sub_count} 个子节点")
|
| 129 |
+
|
| 130 |
+
except json.JSONDecodeError as e:
|
| 131 |
+
print(f"JSON 解析错误: {e}")
|
| 132 |
+
except FileNotFoundError:
|
| 133 |
+
print(f"文件未找到: {file_path}")
|
| 134 |
+
except Exception as e:
|
| 135 |
+
print(f"发生错误: {e}")
|
| 136 |
+
|
| 137 |
+
|
| 138 |
+
if __name__ == "__main__":
|
| 139 |
+
main()
|
generation_user_profile/code/generate_profile.py → generate_user_profile_final/code/generate_profile_ind.py
RENAMED
|
@@ -7,6 +7,8 @@ import os
|
|
| 7 |
import random
|
| 8 |
import sys
|
| 9 |
import time
|
|
|
|
|
|
|
| 10 |
from typing import Dict, List, Any, Optional
|
| 11 |
from config import get_completion
|
| 12 |
import subprocess
|
|
@@ -24,23 +26,64 @@ def safe_str(value):
|
|
| 24 |
def get_project_root() -> str:
|
| 25 |
"""获取项目根目录的路径"""
|
| 26 |
current_dir = os.path.dirname(os.path.abspath(__file__))
|
| 27 |
-
project_root = os.path.abspath(os.path.join(current_dir, '..'
|
| 28 |
return project_root
|
| 29 |
|
| 30 |
|
| 31 |
-
def
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 32 |
"""保存JSON文件
|
| 33 |
|
| 34 |
Args:
|
| 35 |
file_path: 目标文件路径
|
| 36 |
data: 要保存的数据
|
|
|
|
|
|
|
|
|
|
|
|
|
| 37 |
"""
|
| 38 |
try:
|
| 39 |
-
|
| 40 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 41 |
json.dump(data, f, ensure_ascii=False, indent=2)
|
|
|
|
| 42 |
except Exception as e:
|
| 43 |
print(f"保存JSON文件时出错: {e}")
|
|
|
|
| 44 |
|
| 45 |
|
| 46 |
def extract_paths(obj: Dict, prefix: str = "") -> List[str]:
|
|
@@ -64,16 +107,14 @@ def extract_paths(obj: Dict, prefix: str = "") -> List[str]:
|
|
| 64 |
return paths
|
| 65 |
|
| 66 |
|
| 67 |
-
# 已删除不再需要的generate_attribute_value函数
|
| 68 |
-
|
| 69 |
|
| 70 |
-
def generate_category_attributes(category_paths: Dict,
|
| 71 |
-
"""
|
| 72 |
|
| 73 |
参数:
|
| 74 |
-
category_paths: 类
|
| 75 |
-
|
| 76 |
-
category_name: 类
|
| 77 |
|
| 78 |
返回:
|
| 79 |
Dict: 生成的所有属性值。
|
|
@@ -90,109 +131,93 @@ def generate_category_attributes(category_paths: Dict, base_summary: str, catego
|
|
| 90 |
else:
|
| 91 |
collect_leaf_paths(value, path)
|
| 92 |
|
| 93 |
-
collect_leaf_paths(category_paths,
|
| 94 |
|
| 95 |
# 如果没有叶子节点,直接返回空字典
|
| 96 |
if not leaf_paths:
|
| 97 |
return {}
|
| 98 |
|
| 99 |
-
#
|
| 100 |
-
system_prompt = """
|
| 101 |
-
1. Are factually consistent with the information present in the base summary.
|
| 102 |
-
2. Maintain strict logical consistency with each other, ensuring no contradictions or logical flaws are introduced.
|
| 103 |
-
3. Are semantically relevant to their respective attribute paths.
|
| 104 |
-
4. Are plausible, realistic, and contain appropriate detail while upholding overall credibility of the profile.
|
| 105 |
-
IMPORTANT: Avoid including anything related to community-building activities.
|
| 106 |
-
|
| 107 |
-
Format your response as a JSON object where each key is the attribute path and each value is the generated attribute value (not exceeding 50 characters).
|
| 108 |
-
Example format:
|
| 109 |
-
{
|
| 110 |
-
"Category.Subcategory.AttributePath1": "Generated value 1",
|
| 111 |
-
"Category.Subcategory.AttributePath2": "Generated value 2"
|
| 112 |
-
}
|
| 113 |
-
"""
|
| 114 |
-
|
| 115 |
-
# 如果叶子节���过多,分批处理
|
| 116 |
-
MAX_PATHS_PER_BATCH = 50 # 每批处理的最大路径数
|
| 117 |
-
all_generated_values = {}
|
| 118 |
|
| 119 |
-
#
|
| 120 |
-
|
|
|
|
|
|
|
|
|
|
| 121 |
|
| 122 |
-
|
|
|
|
|
|
|
|
|
|
| 123 |
|
| 124 |
-
|
| 125 |
-
|
| 126 |
-
|
| 127 |
-
|
| 128 |
-
|
| 129 |
-
|
| 130 |
-
|
| 131 |
-
|
| 132 |
-
{"role": "user", "content": user_prompt}
|
| 133 |
-
]
|
| 134 |
-
|
| 135 |
try:
|
| 136 |
-
|
| 137 |
-
|
| 138 |
-
|
| 139 |
-
|
| 140 |
-
|
| 141 |
-
|
| 142 |
-
|
| 143 |
-
|
| 144 |
-
|
| 145 |
-
|
| 146 |
-
|
| 147 |
-
|
| 148 |
-
|
| 149 |
-
|
| 150 |
-
|
| 151 |
-
|
| 152 |
-
|
| 153 |
-
|
| 154 |
-
|
| 155 |
-
batch_values = json.loads(response)
|
| 156 |
-
|
| 157 |
-
print(f" 成功生成第 {batch_index+1} 批的 {len(batch_values)} 个属性值")
|
| 158 |
-
all_generated_values.update(batch_values)
|
| 159 |
-
except json.JSONDecodeError as e:
|
| 160 |
-
print(f" 解析第 {batch_index+1} 批属性值JSON失败: {e}")
|
| 161 |
-
print(f" 响应内容: {response[:100]}..." if len(response) > 100 else f"响应内容: {response}")
|
| 162 |
-
except Exception as e:
|
| 163 |
-
print(f" 生成第 {batch_index+1} 批属性值时出错: {e}")
|
| 164 |
-
|
| 165 |
-
print(f" 所有批次处理完成,共生成 {len(all_generated_values)} 个属性值")
|
| 166 |
-
return all_generated_values
|
| 167 |
|
| 168 |
|
| 169 |
-
def generate_final_summary(profile: Dict) -> str:
|
| 170 |
-
"""
|
| 171 |
|
| 172 |
-
|
| 173 |
-
profile:
|
| 174 |
-
|
| 175 |
-
|
|
|
|
| 176 |
"""
|
| 177 |
system_prompt = """
|
| 178 |
-
Your
|
| 179 |
|
| 180 |
Content Requirements:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 181 |
|
| 182 |
-
|
| 183 |
-
|
| 184 |
-
|
| 185 |
-
|
| 186 |
-
1. **Ensure an Authentic Voice:**
|
| 187 |
-
Your narrative should generally reflect the tone and sophistication suggested by the profile's data.
|
| 188 |
-
However, if the language in the source text seems inconsistent with the character's stated age or background, your primary duty is to adopt a voice that is truly authentic to the character's context. You must **translate** the *meaning* of the data into a believable voice, rather than copying the source text's style verbatim.
|
| 189 |
|
| 190 |
-
|
| 191 |
-
Your narrative must be grounded in the source text. Do not invent new core facts. You can and should add minor, plausible details that bridge gaps between facts to make the narrative more vivid and realistic.
|
| 192 |
-
Additionally, if a core fact in the source data appears highly implausible or contradictory in a real-world context, you should creatively reframe it to make the story believable. Instead of stating the implausible fact directly, you can frame it as part of a unique circumstance, a powerful memory, a personal aspiration, or a fantasy. Your goal is to produce a believable story, even if it requires creatively interpreting the source data to resolve inconsistencies.
|
| 193 |
-
|
| 194 |
-
"""
|
| 195 |
-
user_prompt = f"Complete Profile (in JSON format):\n{json.dumps(profile, ensure_ascii=False, indent=2)}\n\nPlease generate an objective and factual summary in English that covers all core information from the profile in clear, coherent paragraphs. The summary should be between 150-400 words."
|
| 196 |
|
| 197 |
messages = [
|
| 198 |
{"role": "system", "content": system_prompt},
|
|
@@ -202,13 +227,15 @@ Adopt a first-person perspective ("I," "my," "me"). The output should be a seaml
|
|
| 202 |
try:
|
| 203 |
response = get_completion(messages)
|
| 204 |
summary = response.strip() if response else ""
|
| 205 |
-
#
|
| 206 |
word_count = len(summary.split())
|
| 207 |
-
if word_count <
|
| 208 |
-
print(f"Warning: Summary is only {word_count} words
|
| 209 |
elif word_count > 400:
|
| 210 |
summary = enforce_word_limit(summary, 400)
|
| 211 |
-
print(f"Summary was
|
|
|
|
|
|
|
| 212 |
return summary
|
| 213 |
except Exception as e:
|
| 214 |
print(f"Error generating final summary: {e}")
|
|
@@ -248,36 +275,45 @@ def generate_section(template_section: Dict, base_info: str, section_name: str,
|
|
| 248 |
|
| 249 |
print(f"{indent_str}正在生成 {section_name} 部分...")
|
| 250 |
|
| 251 |
-
#
|
| 252 |
-
#
|
| 253 |
-
|
| 254 |
-
|
| 255 |
-
# 如果成功生成了属性值,将其添加到结果中
|
| 256 |
-
if all_attributes:
|
| 257 |
-
# 构建结果字典
|
| 258 |
-
for path, value in all_attributes.items():
|
| 259 |
-
# 分解路径
|
| 260 |
-
parts = path.split('.')
|
| 261 |
-
# 跳过第一部分(大类名称)
|
| 262 |
-
if len(parts) > 1 and parts[0] == section_name:
|
| 263 |
-
parts = parts[1:]
|
| 264 |
-
|
| 265 |
-
# 递归构建嵌套字典
|
| 266 |
-
current = section_result
|
| 267 |
-
for i, part in enumerate(parts):
|
| 268 |
-
if i == len(parts) - 1: # 最后一个部分,设置值
|
| 269 |
-
current[part] = value
|
| 270 |
-
print(f"{indent_str} - {'.'.join(parts)}: {value}")
|
| 271 |
-
else:
|
| 272 |
-
if part not in current:
|
| 273 |
-
current[part] = {}
|
| 274 |
-
current = current[part]
|
| 275 |
|
| 276 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 277 |
|
| 278 |
-
# 如果一次性生成失败,
|
| 279 |
-
|
| 280 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 281 |
|
| 282 |
return section_result
|
| 283 |
|
|
@@ -290,77 +326,87 @@ def enforce_word_limit(text: str, limit: int = 300) -> str:
|
|
| 290 |
return text
|
| 291 |
|
| 292 |
|
| 293 |
-
def append_profile_to_json(file_path: str, profile: Dict) ->
|
| 294 |
"""追加个人资料到 JSON 文件
|
| 295 |
|
| 296 |
参数:
|
| 297 |
file_path: 目标文件路径
|
| 298 |
profile: 要追加的个人资料
|
|
|
|
|
|
|
|
|
|
|
|
|
| 299 |
"""
|
| 300 |
try:
|
| 301 |
-
|
| 302 |
-
|
| 303 |
-
|
| 304 |
-
|
| 305 |
-
# Append the profile to the JSON file
|
| 306 |
-
output_file = os.path.join(output_dir, "new_user_profiles.json")
|
| 307 |
-
|
| 308 |
-
# Load existing profiles if the file exists
|
| 309 |
-
if os.path.exists(output_file):
|
| 310 |
-
with open(output_file, "r", encoding="utf-8") as f:
|
| 311 |
-
profiles = json.load(f)
|
| 312 |
else:
|
| 313 |
-
|
| 314 |
-
|
| 315 |
-
|
| 316 |
-
|
|
|
|
|
|
|
|
|
|
| 317 |
|
| 318 |
-
|
| 319 |
-
with open(
|
| 320 |
json.dump(profiles, f, ensure_ascii=False, indent=2)
|
|
|
|
| 321 |
except Exception as e:
|
| 322 |
print(f"追加个人资料到 JSON 文件时出错: {e}")
|
| 323 |
-
|
| 324 |
|
| 325 |
|
| 326 |
-
def generate_single_profile(template=None, profile_index=
|
| 327 |
-
"""生成
|
| 328 |
|
| 329 |
参数:
|
| 330 |
template: 可选的用于生成的模板。
|
| 331 |
profile_index: 要生成的档案索引。
|
|
|
|
| 332 |
|
| 333 |
返回:
|
| 334 |
Dict: 生成的用户档案。
|
| 335 |
"""
|
| 336 |
|
| 337 |
-
|
| 338 |
-
|
|
|
|
| 339 |
try:
|
| 340 |
-
#
|
| 341 |
-
|
| 342 |
-
|
| 343 |
-
|
| 344 |
-
|
| 345 |
-
|
| 346 |
-
|
| 347 |
-
|
| 348 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 349 |
except Exception as e:
|
| 350 |
print(f"Error executing select_attributes functions: {e}")
|
| 351 |
return {}
|
| 352 |
|
| 353 |
# Load basic profile information and selected paths (base info is only a reference for GPT generation)
|
| 354 |
-
|
| 355 |
-
|
|
|
|
| 356 |
with open(base_info_path, 'r', encoding='utf-8') as f:
|
| 357 |
base_info = json.load(f)
|
| 358 |
if 'Occupations' not in base_info:
|
| 359 |
print("Warning: 'Occupations' key is missing in the user profile. Setting it to an empty list.")
|
| 360 |
base_info['Occupations'] = []
|
| 361 |
|
| 362 |
-
|
| 363 |
-
selected_paths_path = os.path.join(os.path.dirname(os.path.dirname(__file__)), 'output', 'selected_paths.json')
|
| 364 |
with open(selected_paths_path, 'r', encoding='utf-8') as f:
|
| 365 |
selected_paths = json.load(f)
|
| 366 |
|
|
@@ -375,171 +421,236 @@ def generate_single_profile(template=None, profile_index=None) -> Dict:
|
|
| 375 |
profile = {
|
| 376 |
"Base Info": base_info,
|
| 377 |
"Generated At": time.strftime("%Y-%m-%d %H:%M:%S"),
|
| 378 |
-
"Profile Index":
|
| 379 |
}
|
| 380 |
|
| 381 |
# 步骤1:生成 Demographic Information
|
|
|
|
| 382 |
demographic_input = (
|
| 383 |
"Base Information (for reference):\n" + json.dumps(base_info, ensure_ascii=False, indent=2) + "\n\n"
|
| 384 |
-
"
|
|
|
|
| 385 |
)
|
| 386 |
demographic_template = selected_paths.get("Demographic Information")
|
| 387 |
-
if isinstance(demographic_template, dict):
|
| 388 |
-
demographic_template = json.dumps(demographic_template, ensure_ascii=False)
|
| 389 |
if demographic_template and demographic_template != "":
|
| 390 |
print('Generating Demographic Information...')
|
| 391 |
-
demographic_section =
|
| 392 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 393 |
else:
|
| 394 |
print('No valid "Demographic Information" template found in selected_paths, skipping Demographic Information.')
|
| 395 |
-
|
| 396 |
# 步骤2:生成职业信息
|
| 397 |
career_template = selected_paths.get("Career and Work Identity")
|
| 398 |
-
if isinstance(career_template, dict):
|
| 399 |
-
career_template = json.dumps(career_template, ensure_ascii=False)
|
| 400 |
if career_template and career_template != "":
|
| 401 |
print('Generating Career and Work Identity...')
|
| 402 |
# Construct input for Career and Work Identity, including Demographic Information
|
| 403 |
career_input = (
|
| 404 |
"Base Information (for reference):\n" + json.dumps(base_info, ensure_ascii=False, indent=2) + "\n\n"
|
|
|
|
| 405 |
"Demographic Information (for reference):\n" + json.dumps(profile.get("Demographic Information", {}), ensure_ascii=False, indent=2) + "\n\n"
|
| 406 |
-
"Instructions: Based on the `base_info` and `Demographic Information` provided above, **develop and elaborate on** the 'Career and Work Identity' section in English. "
|
| 407 |
-
"Your aim is to distill and articulate the career identity, professional journey, and work-related aspirations that are **evident or can be reasonably inferred from the combined `base_info` and `Demographic Information`**. "
|
| 408 |
"Offer fresh insights by providing a **deeper, more nuanced interpretation or by highlighting connections within the provided data** that illuminate these aspects. "
|
| 409 |
"Ensure that this elaboration is **logically consistent with and directly stems from** the provided information. "
|
| 410 |
"**Do not introduce new career details or aspirations that are not grounded in or clearly supported by the source material.** "
|
| 411 |
"The section should be an insightful and coherent expansion of what can be understood from the source material."
|
| 412 |
)
|
| 413 |
-
career_info_section =
|
| 414 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 415 |
else:
|
| 416 |
print('No valid "Career and Work Identity" template found in selected_paths, skipping.')
|
| 417 |
-
# Optionally, to stop overall generation if career is mandatory, you could return profile here; else just continue.
|
| 418 |
-
# return profile
|
| 419 |
|
| 420 |
# 步骤3:生成 Core Values, Beliefs, and Philosophy
|
| 421 |
pv_orientation = base_info.get("personal_values", {}).get("values_orientation", "")
|
| 422 |
if not isinstance(pv_orientation, str):
|
| 423 |
pv_orientation = json.dumps(pv_orientation, ensure_ascii=False)
|
| 424 |
core_input = (
|
|
|
|
| 425 |
"Demographic Information (for reference):\n" + json.dumps(profile.get("Demographic Information", {}), ensure_ascii=False, indent=2) + "\n\n"
|
| 426 |
"Career Information (for reference):\n" + json.dumps(profile.get("Career and Work Identity", {}), ensure_ascii=False, indent=2) + "\n\n"
|
| 427 |
"Personal Values (for reference):\n" + pv_orientation + "\n\n"
|
| 428 |
-
"Instructions: Based on the
|
| 429 |
)
|
| 430 |
core_template = selected_paths.get("Core Values, Beliefs, and Philosophy")
|
| 431 |
-
if isinstance(core_template, dict):
|
| 432 |
-
core_template = json.dumps(core_template, ensure_ascii=False)
|
| 433 |
if core_template and core_template != "":
|
| 434 |
print('Generating Core Values, Beliefs, and Philosophy...')
|
| 435 |
-
core_values_section =
|
| 436 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 437 |
else:
|
| 438 |
print('No valid "Core Values, Beliefs, and Philosophy" template found in selected_paths, skipping.')
|
| 439 |
|
| 440 |
-
# 步骤4:生成 Lifestyle and Daily Routine
|
| 441 |
life_attitude = base_info["life_attitude"]
|
| 442 |
-
|
| 443 |
-
# 将各部分转换为字符串以便在提示中使用
|
| 444 |
-
base_info_str = json.dumps(base_info, ensure_ascii=False, indent=2)
|
| 445 |
-
demographic_info_str = json.dumps(profile.get("Demographic Information", {}), ensure_ascii=False, indent=2)
|
| 446 |
-
career_info_str = json.dumps(profile.get("Career and Work Identity", {}), ensure_ascii=False, indent=2)
|
| 447 |
-
core_values_str = json.dumps(profile.get("Core Values, Beliefs, and Philosophy", {}), ensure_ascii=False, indent=2)
|
| 448 |
-
|
| 449 |
lifestyle_input = (
|
| 450 |
-
|
| 451 |
-
|
| 452 |
-
|
| 453 |
-
|
| 454 |
-
|
| 455 |
-
|
| 456 |
-
"## Instructions:\n"
|
| 457 |
-
"Based on the **complete profile context provided above**, your task is to generate content for the section you are asked to create. Follow the specific guidance below for the relevant section.\n\n"
|
| 458 |
-
|
| 459 |
-
"**Guidance for 'Lifestyle and Daily Routine':**\n"
|
| 460 |
-
"When generating this section, focus on translating the person's values, career, age, and philosophy into **concrete daily actions and habits**. How do their beliefs manifest in their **work schedule, sleep patterns, physical activity, vacation style, and travel preferences**? Ensure the lifestyle is a logical and practical extension of their established character.\n\n"
|
| 461 |
-
|
| 462 |
-
"**Guidance for 'Cultural and Social Context':**\n"
|
| 463 |
-
"When generating this section, focus on the person's **relationship with society and their environment**. Based on their location, values, and life story, describe their **living environment, preferred social circle, communication style, parenting style (if applicable), and relationship with tradition**. How do their internal beliefs shape their external social world?"
|
| 464 |
)
|
| 465 |
-
|
| 466 |
lifestyle_template = selected_paths.get("Lifestyle and Daily Routine")
|
| 467 |
-
if isinstance(lifestyle_template, dict):
|
| 468 |
-
lifestyle_template = json.dumps(lifestyle_template, ensure_ascii=False)
|
| 469 |
if lifestyle_template and lifestyle_template != "":
|
| 470 |
print('Generating Lifestyle and Daily Routine...')
|
| 471 |
-
lifestyle_section =
|
| 472 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 473 |
else:
|
| 474 |
print('No valid "Lifestyle and Daily Routine" template found in selected_paths, skipping.')
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 475 |
cultural_template = selected_paths.get("Cultural and Social Context")
|
| 476 |
-
if isinstance(cultural_template, dict):
|
| 477 |
-
cultural_template = json.dumps(cultural_template, ensure_ascii=False)
|
| 478 |
if cultural_template and cultural_template != "":
|
| 479 |
print('Generating Cultural and Social Context...')
|
| 480 |
-
cultural_section =
|
| 481 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 482 |
else:
|
| 483 |
print('No valid "Cultural and Social Context" template found in selected_paths, skipping.')
|
| 484 |
|
| 485 |
-
# 步骤
|
| 486 |
interests = base_info["interests"]
|
| 487 |
hobbies_input = (
|
| 488 |
"Base Information (for reference):\n" + json.dumps(base_info, ensure_ascii=False, indent=2) + "\n\n"
|
|
|
|
| 489 |
"Demographic Information (for reference):\n" + json.dumps(profile.get("Demographic Information", {}), ensure_ascii=False, indent=2) + "\n\n"
|
| 490 |
"Career Information (for reference):\n" + json.dumps(profile.get("Career and Work Identity", {}), ensure_ascii=False, indent=2) + "\n\n"
|
| 491 |
"Core Values, Beliefs, and Philosophy (for reference):\n" + json.dumps(profile.get("Core Values, Beliefs, and Philosophy", {}), ensure_ascii=False, indent=2) + "\n\n"
|
| 492 |
"Lifestyle and Daily Routine (for reference):\n" + json.dumps(profile.get("Lifestyle and Daily Routine", {}), ensure_ascii=False, indent=2) + "\n\n"
|
| 493 |
"Cultural and Social Context (for reference):\n" + json.dumps(profile.get("Cultural and Social Context", {}), ensure_ascii=False, indent=2) + "\n\n"
|
| 494 |
-
|
| 495 |
-
"## Instructions:\n"
|
| 496 |
-
"Based on the complete profile context provided above, generate the 'Hobbies, Interests, and Lifestyle' section.\n\n"
|
| 497 |
-
|
| 498 |
-
"1. **Use Base Hobbies as a Starting Point:** Begin with the interests listed in `base_info`, but treat them as seeds for deeper exploration, not as rigid boundaries.\n\n"
|
| 499 |
-
|
| 500 |
-
"2. **Embrace Imagination and Psychological Depth:** This is the key instruction. You are encouraged to use **creative imagination**. Based on the person's complete profile, the interpretation of their interests can be **positive, deeply negative, or even 'toxic'**. Explore the hidden psychological dimensions of their hobbies. How could a seemingly simple interest become a mechanism for **coping, obsession, self-destruction, control, or escapism**? Be bold in your interpretation.\n\n"
|
| 501 |
-
|
| 502 |
-
"3. **Synthesize with Full Context:** Ensure your imaginative elaborations are still **psychologically consistent** with the person's established character. The 'how' and 'why' of their interests should be deeply connected to their career, demographics, and worldview.\n\n"
|
| 503 |
-
|
| 504 |
-
"4. **Detail Related Lifestyle Choices:** Describe the lifestyle choices that support these interests. This includes the types of products they might buy, the media they consume, or other related activities, all of which should reflect the **positive or negative nature** of their engagement with the hobby."
|
| 505 |
)
|
| 506 |
-
|
| 507 |
hobbies_template = selected_paths.get("Hobbies, Interests, and Lifestyle")
|
| 508 |
-
if isinstance(hobbies_template, dict):
|
| 509 |
-
hobbies_template = json.dumps(hobbies_template, ensure_ascii=False)
|
| 510 |
if hobbies_template and hobbies_template != "":
|
| 511 |
print('Generating Hobbies, Interests, and Lifestyle...')
|
| 512 |
-
hobbies_section =
|
| 513 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 514 |
else:
|
| 515 |
print('No valid "Hobbies, Interests, and Lifestyle" template found in selected_paths, skipping.')
|
| 516 |
|
| 517 |
-
# 步骤
|
| 518 |
other_attributes_input = (
|
|
|
|
| 519 |
"Complete Profile (for reference):\n" + json.dumps(profile, ensure_ascii=False, indent=2) + "\n\n"
|
| 520 |
-
|
| 521 |
-
"Based on the complete profile provided, your task is to synthesize and generate a set of 'Other Attributes' in English that add final depth and nuance to the character. Instead of random facts, derive these attributes by analyzing the entire profile as a whole. Specifically, generate details for the following categories:\n\n"
|
| 522 |
-
|
| 523 |
-
"1. **Communication Style:**\n"
|
| 524 |
-
"Describe their typical manner of speaking and writing. Is it direct, quiet, formal, verbose, witty, or something else? How do their core values and social context shape how they communicate with others?\n\n"
|
| 525 |
-
|
| 526 |
-
"2. **Decision-Making Style:**\n"
|
| 527 |
-
"Analyze how they generally make choices. Are they impulsive, analytical, cautious, risk-averse, or guided by emotion? Connect this style to their career, financial status, and key life events.\n\n"
|
| 528 |
-
|
| 529 |
-
"3. **Defining Quirks or Habits:**\n"
|
| 530 |
-
"Imagine and describe one or two small, defining habits or personal quirks that make the character feel real and unique. This could be a daily ritual, a nervous gesture, or an unusual habit related to their hobbies. Ensure it is psychologically consistent with their established personality.\n\n"
|
| 531 |
-
|
| 532 |
-
"4. **Core Internal Conflict:**\n"
|
| 533 |
-
"Identify and articulate the central psychological tension or conflict that defines the character's inner world. What two opposing forces, desires, or beliefs are constantly at odds within them? This should serve as a concise summary of their core psychological drama."
|
| 534 |
-
|
| 535 |
)
|
| 536 |
other_template = selected_paths.get("Other Attributes")
|
| 537 |
-
if isinstance(other_template, dict):
|
| 538 |
-
other_template = json.dumps(other_template, ensure_ascii=False)
|
| 539 |
if other_template and other_template != "":
|
| 540 |
print('Generating Other Attributes...')
|
| 541 |
-
other_attributes_section =
|
| 542 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 543 |
else:
|
| 544 |
print('No valid "Other Attributes" template found in selected_paths, skipping.')
|
| 545 |
|
|
@@ -548,90 +659,97 @@ def generate_single_profile(template=None, profile_index=None) -> Dict:
|
|
| 548 |
for key in ['base_info', 'Base Info', 'personal_story', 'interests', 'Occupations']:
|
| 549 |
profile_for_summary.pop(key, None)
|
| 550 |
|
| 551 |
-
# Generate the final summary using the filtered profile
|
| 552 |
-
final_summary_text = generate_final_summary(profile_for_summary)
|
| 553 |
profile["Summary"] = final_summary_text
|
| 554 |
|
| 555 |
# Remove unwanted keys from the final profile
|
| 556 |
for key in ['base_info', 'Base Info', 'personal_story', 'interests', 'Occupations']:
|
| 557 |
profile.pop(key, None)
|
| 558 |
|
| 559 |
-
# 将生成的profile追加到一个新的JSON文件中,支持存储多个user profile
|
| 560 |
-
new_profiles_file = os.path.join(os.path.dirname(__file__), 'output', 'new_user_profiles.json')
|
| 561 |
-
append_profile_to_json(new_profiles_file, profile)
|
| 562 |
-
|
| 563 |
return profile
|
| 564 |
|
| 565 |
|
| 566 |
-
def generate_multiple_profiles(
|
| 567 |
-
"""生成多
|
| 568 |
|
| 569 |
参数:
|
| 570 |
-
|
| 571 |
"""
|
| 572 |
start_time = time.time()
|
| 573 |
-
print(f"开始生成 {
|
| 574 |
|
| 575 |
# 获取项目根目录
|
| 576 |
project_root = get_project_root()
|
| 577 |
|
| 578 |
# 创建输出目录
|
| 579 |
-
output_dir =
|
| 580 |
os.makedirs(output_dir, exist_ok=True)
|
| 581 |
|
| 582 |
-
#
|
| 583 |
-
|
|
|
|
| 584 |
|
| 585 |
# 初始化存储所有配置文件的字典
|
| 586 |
all_profiles = {
|
| 587 |
"metadata": {
|
| 588 |
"profiles_completed": 0,
|
| 589 |
"total_profiles": total_profiles,
|
| 590 |
-
"
|
|
|
|
| 591 |
}
|
| 592 |
}
|
| 593 |
|
| 594 |
-
# 设置合并文件路径
|
| 595 |
-
|
|
|
|
| 596 |
|
| 597 |
# 初始化保存合并文件
|
| 598 |
-
save_json_file(all_profiles_path, all_profiles)
|
| 599 |
-
print(f"初始化合并文件: {
|
|
|
|
| 600 |
|
| 601 |
# 计数器,用于跟踪总共生成的档案数量
|
| 602 |
profile_count = 0
|
| 603 |
|
| 604 |
-
# 逐
|
| 605 |
-
for
|
| 606 |
-
|
| 607 |
-
|
| 608 |
-
print(f"\n----- 开始生成第 {profile_index+1}/{num_profiles} 个用户资料 -----\n")
|
| 609 |
|
| 610 |
-
|
| 611 |
-
|
| 612 |
-
|
| 613 |
-
|
| 614 |
-
if not profile:
|
| 615 |
-
print(f"第 {profile_index+1} 个资料生成失败,跳过")
|
| 616 |
-
continue
|
| 617 |
|
| 618 |
-
|
| 619 |
-
profile_key = f"Profile_{profile_index+1}"
|
| 620 |
-
all_profiles[profile_key] = profile
|
| 621 |
-
all_profiles["metadata"]["profiles_completed"] = profile_count
|
| 622 |
|
| 623 |
-
|
| 624 |
-
|
| 625 |
-
|
| 626 |
-
|
| 627 |
-
|
| 628 |
-
|
| 629 |
-
|
| 630 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 631 |
|
| 632 |
# 添加生成完成状态
|
| 633 |
all_profiles["metadata"]["status"] = "completed"
|
| 634 |
-
save_json_file(all_profiles_path, all_profiles)
|
| 635 |
|
| 636 |
end_time = time.time()
|
| 637 |
elapsed_time = end_time - start_time
|
|
@@ -639,16 +757,4 @@ def generate_multiple_profiles(num_profiles: int = 50) -> None:
|
|
| 639 |
print(f"生成完成,耗时 {elapsed_time:.2f} 秒")
|
| 640 |
|
| 641 |
if __name__ == "__main__":
|
| 642 |
-
|
| 643 |
-
print("Generating a single user profile...")
|
| 644 |
-
profile = generate_single_profile(None, 0)
|
| 645 |
-
|
| 646 |
-
# Display only the final summary
|
| 647 |
-
if profile and "Summary" in profile:
|
| 648 |
-
print("\n" + "="*50)
|
| 649 |
-
print("FINAL PROFILE SUMMARY:")
|
| 650 |
-
print("="*50)
|
| 651 |
-
print(profile["Summary"])
|
| 652 |
-
print("="*50)
|
| 653 |
-
else:
|
| 654 |
-
print("Failed to generate profile or summary.")
|
|
|
|
| 7 |
import random
|
| 8 |
import sys
|
| 9 |
import time
|
| 10 |
+
import shutil
|
| 11 |
+
from datetime import datetime
|
| 12 |
from typing import Dict, List, Any, Optional
|
| 13 |
from config import get_completion
|
| 14 |
import subprocess
|
|
|
|
| 26 |
def get_project_root() -> str:
|
| 27 |
"""获取项目根目录的路径"""
|
| 28 |
current_dir = os.path.dirname(os.path.abspath(__file__))
|
| 29 |
+
project_root = os.path.abspath(os.path.join(current_dir, '..'))
|
| 30 |
return project_root
|
| 31 |
|
| 32 |
|
| 33 |
+
def copy_files_from_source_to_target():
|
| 34 |
+
"""复制文件从源位置到目标位置"""
|
| 35 |
+
# 源路径 - 现在已经不需要复制,因为我们直接保存到正确的目录
|
| 36 |
+
# 但为了兼容性,我们保留这个函数
|
| 37 |
+
correct_output_dir = os.path.join(get_project_root(), "output")
|
| 38 |
+
|
| 39 |
+
# 确保目标目录存在
|
| 40 |
+
os.makedirs(correct_output_dir, exist_ok=True)
|
| 41 |
+
|
| 42 |
+
print(f"输出目录已设置为: {correct_output_dir}")
|
| 43 |
+
return True
|
| 44 |
+
|
| 45 |
+
|
| 46 |
+
def get_timestamped_filename(base_path: str) -> str:
|
| 47 |
+
"""为文件路径添加时间戳
|
| 48 |
+
|
| 49 |
+
Args:
|
| 50 |
+
base_path: 基础文件路径
|
| 51 |
+
|
| 52 |
+
Returns:
|
| 53 |
+
str: 带时间戳的文件路径
|
| 54 |
+
"""
|
| 55 |
+
directory = os.path.dirname(base_path)
|
| 56 |
+
filename = os.path.basename(base_path)
|
| 57 |
+
name, ext = os.path.splitext(filename)
|
| 58 |
+
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
|
| 59 |
+
timestamped_filename = f"{name}_{timestamp}{ext}"
|
| 60 |
+
return os.path.join(directory, timestamped_filename)
|
| 61 |
+
|
| 62 |
+
|
| 63 |
+
def save_json_file(file_path: str, data: Dict, use_timestamp: bool = True) -> str:
|
| 64 |
"""保存JSON文件
|
| 65 |
|
| 66 |
Args:
|
| 67 |
file_path: 目标文件路径
|
| 68 |
data: 要保存的数据
|
| 69 |
+
use_timestamp: 是否使用时间戳,默认为True
|
| 70 |
+
|
| 71 |
+
Returns:
|
| 72 |
+
str: 实际保存的文件路径
|
| 73 |
"""
|
| 74 |
try:
|
| 75 |
+
if use_timestamp:
|
| 76 |
+
actual_path = get_timestamped_filename(file_path)
|
| 77 |
+
else:
|
| 78 |
+
actual_path = file_path
|
| 79 |
+
|
| 80 |
+
os.makedirs(os.path.dirname(actual_path), exist_ok=True)
|
| 81 |
+
with open(actual_path, 'w', encoding='utf-8') as f:
|
| 82 |
json.dump(data, f, ensure_ascii=False, indent=2)
|
| 83 |
+
return actual_path
|
| 84 |
except Exception as e:
|
| 85 |
print(f"保存JSON文件时出错: {e}")
|
| 86 |
+
return file_path
|
| 87 |
|
| 88 |
|
| 89 |
def extract_paths(obj: Dict, prefix: str = "") -> List[str]:
|
|
|
|
| 107 |
return paths
|
| 108 |
|
| 109 |
|
|
|
|
|
|
|
| 110 |
|
| 111 |
+
def generate_category_attributes(category_paths: Dict, custom_prompt: str, category_name: str) -> Dict:
|
| 112 |
+
"""一次性生成一个一级大类下的所有属性值。
|
| 113 |
|
| 114 |
参数:
|
| 115 |
+
category_paths: 一级大类下的所有属性路径及其结构。
|
| 116 |
+
custom_prompt: 自定义的完整prompt,包含具体的生成指令。
|
| 117 |
+
category_name: 一级大类名称。
|
| 118 |
|
| 119 |
返回:
|
| 120 |
Dict: 生成的所有属性值。
|
|
|
|
| 131 |
else:
|
| 132 |
collect_leaf_paths(value, path)
|
| 133 |
|
| 134 |
+
collect_leaf_paths(category_paths, "")
|
| 135 |
|
| 136 |
# 如果没有叶子节点,直接返回空字典
|
| 137 |
if not leaf_paths:
|
| 138 |
return {}
|
| 139 |
|
| 140 |
+
# 简化的系统提示,只负责JSON格式
|
| 141 |
+
system_prompt = """Format your response as a JSON object where each key is the attribute path and each value is the generated attribute value (not exceeding 100 characters)."""
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 142 |
|
| 143 |
+
# 使用自定义prompt + 属性路径列表
|
| 144 |
+
user_prompt = f"{custom_prompt}\n\nAttribute Paths to generate values for:\n"
|
| 145 |
+
for path in leaf_paths:
|
| 146 |
+
user_prompt += f"- {path}\n"
|
| 147 |
+
user_prompt += "\nGenerate suitable values for all these attributes in JSON format."
|
| 148 |
|
| 149 |
+
messages = [
|
| 150 |
+
{"role": "system", "content": system_prompt},
|
| 151 |
+
{"role": "user", "content": user_prompt}
|
| 152 |
+
]
|
| 153 |
|
| 154 |
+
try:
|
| 155 |
+
print(f" 正在一次性生成 {category_name} 下的 {len(leaf_paths)} 个属性值...")
|
| 156 |
+
response = get_completion(messages)
|
| 157 |
+
if not response:
|
| 158 |
+
print(f" 生成 {category_name} 属性值失败: 空响应")
|
| 159 |
+
return {}
|
| 160 |
+
|
| 161 |
+
# 尝试解析JSON响应
|
|
|
|
|
|
|
|
|
|
| 162 |
try:
|
| 163 |
+
import json
|
| 164 |
+
# 清理响应,移除可能的markdown代码块标记
|
| 165 |
+
cleaned_response = response.strip()
|
| 166 |
+
if cleaned_response.startswith("```json"):
|
| 167 |
+
cleaned_response = cleaned_response[7:]
|
| 168 |
+
if cleaned_response.endswith("```"):
|
| 169 |
+
cleaned_response = cleaned_response[:-3]
|
| 170 |
+
cleaned_response = cleaned_response.strip()
|
| 171 |
+
|
| 172 |
+
generated_values = json.loads(cleaned_response)
|
| 173 |
+
print(f" 成功生成 {len(generated_values)} 个属性值")
|
| 174 |
+
return generated_values
|
| 175 |
+
except json.JSONDecodeError as e:
|
| 176 |
+
print(f" 解析 {category_name} 属性值JSON失败: {e}")
|
| 177 |
+
print(f" 响应内容: {response[:100]}..." if len(response) > 100 else f"响应内容: {response}")
|
| 178 |
+
return {}
|
| 179 |
+
except Exception as e:
|
| 180 |
+
print(f" 生成 {category_name} 属性值时出错: {e}")
|
| 181 |
+
return {}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 182 |
|
| 183 |
|
| 184 |
+
def generate_final_summary(profile: Dict, base_info: Dict = None) -> str:
|
| 185 |
+
"""为用户档案生成最终摘要。
|
| 186 |
|
| 187 |
+
参数:
|
| 188 |
+
profile: 完整的用户档案数据。
|
| 189 |
+
base_info: 基础信息,包含life_story等内容。
|
| 190 |
+
返回:
|
| 191 |
+
str: 最终的摘要文本。
|
| 192 |
"""
|
| 193 |
system_prompt = """
|
| 194 |
+
Your task: Based solely on the provided user attributes and personal story, create an objective and factual personal profile, strictly between 150–400 words.
|
| 195 |
|
| 196 |
Content Requirements:
|
| 197 |
+
• The profile must be written entirely in the first-person perspective.
|
| 198 |
+
• The output should be a coherent, logically structured narrative, not a list of points. The order may vary: it does not need to follow the fixed “background → challenge → conclusion” pattern, and may instead begin with daily life or interests.
|
| 199 |
+
• The opening must explicitly state my country or region, ensuring that geographic location is clearly highlighted at the very start.
|
| 200 |
+
• Must include:
|
| 201 |
+
1. Basic background (e.g., location, identity)
|
| 202 |
+
2. Daily life or work routines
|
| 203 |
+
3. Personal interests and hobbies (explicitly highlighted)
|
| 204 |
+
4. Behavioral tendencies or values (positive or negative)
|
| 205 |
+
• Interests and hobbies must be integrated naturally, not superficially. Add small, ordinary details (e.g., food preferences, leisure activities, quirks) that make the character feel real.
|
| 206 |
+
• If there are negative traits, imperfections, or contradictions, they must be represented faithfully without softening. Do not reframe them as “growth” or “lessons learned.”
|
| 207 |
+
• No declarative or reflective endings. Avoid abstract statements like “I’ve learned…,” “This shows…,” or “Success means….” The ending should remain grounded in daily routines or interests.
|
| 208 |
+
• Only include information explicitly provided in the attributes and story. No invention, speculation, or interpretation.
|
| 209 |
+
• Prohibit the use of words such as' balance 'and' balance '
|
| 210 |
+
"""
|
| 211 |
+
user_prompt = f"Complete Profile (in JSON format):\n{json.dumps(profile, ensure_ascii=False, indent=2)}\n\n"
|
| 212 |
+
|
| 213 |
+
user_prompt +="""Generate a first-person narrative of 100-400 words from the provided profile. Your primary goal is to make the person feel real, believable, and authentic.
|
| 214 |
|
| 215 |
+
To achieve this, strictly follow the 'Show, Don't Tell' principle:
|
| 216 |
+
1. **Illustrate, Don't Declare:** Show values and traits through specific actions, stories, and decisions, rather than stating them directly.
|
| 217 |
+
2. **Connect Actions to Motivation:** Briefly explain the 'why' behind key life choices and habits to reveal the person's inner logic and create narrative depth.
|
| 218 |
+
3. **Maintain a Natural Voice:** The tone must be sincere and grounded—thoughtful but not overly abstract or dramatic.
|
|
|
|
|
|
|
|
|
|
| 219 |
|
| 220 |
+
Weave all elements into a cohesive story, not a simple list of facts."""
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 221 |
|
| 222 |
messages = [
|
| 223 |
{"role": "system", "content": system_prompt},
|
|
|
|
| 227 |
try:
|
| 228 |
response = get_completion(messages)
|
| 229 |
summary = response.strip() if response else ""
|
| 230 |
+
# Check if word count is within acceptable range (100-400 words)
|
| 231 |
word_count = len(summary.split())
|
| 232 |
+
if word_count < 100:
|
| 233 |
+
print(f"Warning: Summary is only {word_count} words (minimum 100)")
|
| 234 |
elif word_count > 400:
|
| 235 |
summary = enforce_word_limit(summary, 400)
|
| 236 |
+
print(f"Summary was adjusted to 400 words (from {word_count})")
|
| 237 |
+
else:
|
| 238 |
+
print(f"Summary generated with {word_count} words")
|
| 239 |
return summary
|
| 240 |
except Exception as e:
|
| 241 |
print(f"Error generating final summary: {e}")
|
|
|
|
| 275 |
|
| 276 |
print(f"{indent_str}正在生成 {section_name} 部分...")
|
| 277 |
|
| 278 |
+
# 如果是一级大类,一次性生成所有属性
|
| 279 |
+
if indent == 0: # 一级大类
|
| 280 |
+
# 使用新函数一次性生成所有属性值
|
| 281 |
+
all_attributes = generate_category_attributes(template_section, base_info, section_name)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 282 |
|
| 283 |
+
# 如果成功生成了属性值,将其添加到结果中
|
| 284 |
+
if all_attributes:
|
| 285 |
+
# 构建结果字典
|
| 286 |
+
for path, value in all_attributes.items():
|
| 287 |
+
# 分解路径
|
| 288 |
+
parts = path.split('.')
|
| 289 |
+
# 跳过第一部分(大类名称)
|
| 290 |
+
if len(parts) > 1 and parts[0] == section_name:
|
| 291 |
+
parts = parts[1:]
|
| 292 |
+
|
| 293 |
+
# 递归构建嵌套字典
|
| 294 |
+
current = section_result
|
| 295 |
+
for i, part in enumerate(parts):
|
| 296 |
+
if i == len(parts) - 1: # 最后一个部分,设置值
|
| 297 |
+
current[part] = value
|
| 298 |
+
print(f"{indent_str} - {'.'.join(parts)}: {value}")
|
| 299 |
+
else:
|
| 300 |
+
if part not in current:
|
| 301 |
+
current[part] = {}
|
| 302 |
+
current = current[part]
|
| 303 |
+
|
| 304 |
+
return section_result
|
| 305 |
|
| 306 |
+
# 如果不是一级大类或者一次性生成失败,则使用原来的递归方式
|
| 307 |
+
for key, value in template_section.items():
|
| 308 |
+
current_path = f"{section_name}.{key}" if section_name else key
|
| 309 |
+
|
| 310 |
+
if isinstance(value, dict):
|
| 311 |
+
if not value: # 叶子节点
|
| 312 |
+
generated_value = generate_attribute_value(current_path, base_info)
|
| 313 |
+
section_result[key] = generated_value
|
| 314 |
+
print(f"{indent_str} - {key}: {generated_value}")
|
| 315 |
+
else: # 嵌套节点
|
| 316 |
+
section_result[key] = generate_section(value, base_info, current_path, indent + 1)
|
| 317 |
|
| 318 |
return section_result
|
| 319 |
|
|
|
|
| 326 |
return text
|
| 327 |
|
| 328 |
|
| 329 |
+
def append_profile_to_json(file_path: str, profile: Dict, use_timestamp: bool = True) -> str:
|
| 330 |
"""追加个人资料到 JSON 文件
|
| 331 |
|
| 332 |
参数:
|
| 333 |
file_path: 目标文件路径
|
| 334 |
profile: 要追加的个人资料
|
| 335 |
+
use_timestamp: 是否使用时间戳,默认为True
|
| 336 |
+
|
| 337 |
+
返回:
|
| 338 |
+
str: 实际保存的文件路径
|
| 339 |
"""
|
| 340 |
try:
|
| 341 |
+
if use_timestamp:
|
| 342 |
+
actual_path = get_timestamped_filename(file_path)
|
| 343 |
+
profiles = [profile] # 新文件,只包含当前profile
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 344 |
else:
|
| 345 |
+
actual_path = file_path
|
| 346 |
+
if os.path.exists(file_path):
|
| 347 |
+
with open(file_path, 'r', encoding='utf-8') as f:
|
| 348 |
+
profiles = json.load(f)
|
| 349 |
+
else:
|
| 350 |
+
profiles = []
|
| 351 |
+
profiles.append(profile)
|
| 352 |
|
| 353 |
+
os.makedirs(os.path.dirname(actual_path), exist_ok=True)
|
| 354 |
+
with open(actual_path, 'w', encoding='utf-8') as f:
|
| 355 |
json.dump(profiles, f, ensure_ascii=False, indent=2)
|
| 356 |
+
return actual_path
|
| 357 |
except Exception as e:
|
| 358 |
print(f"追加个人资料到 JSON 文件时出错: {e}")
|
| 359 |
+
return file_path
|
| 360 |
|
| 361 |
|
| 362 |
+
def generate_single_profile(template: Dict = None, profile_index: int = 0, attribute_count: int = 200) -> Dict:
|
| 363 |
+
"""根据给定的模板生成完整的用户档案。
|
| 364 |
|
| 365 |
参数:
|
| 366 |
template: 可选的用于生成的模板。
|
| 367 |
profile_index: 要生成的档案索引。
|
| 368 |
+
attribute_count: 要包含的属性数量。
|
| 369 |
|
| 370 |
返回:
|
| 371 |
Dict: 生成的用户档案。
|
| 372 |
"""
|
| 373 |
|
| 374 |
+
|
| 375 |
+
# First, run select_attributes.py to update base files (user_profile.json and selected_paths.json)
|
| 376 |
+
print(f'Running select_attributes.py to update base files with {attribute_count} attributes...')
|
| 377 |
try:
|
| 378 |
+
# 直接导入select_attributes模块的函数,而不是通过subprocess运行
|
| 379 |
+
import sys
|
| 380 |
+
import os
|
| 381 |
+
sys.path.append(os.path.dirname(os.path.abspath(__file__)))
|
| 382 |
+
from select_attributes import generate_user_profile as gen_profile
|
| 383 |
+
from select_attributes import get_selected_attributes, save_results
|
| 384 |
+
|
| 385 |
+
# 生成用户配置文件
|
| 386 |
+
user_profile = gen_profile()
|
| 387 |
+
# 获取指定数量的属性
|
| 388 |
+
selected_paths = get_selected_attributes(user_profile, attribute_count)
|
| 389 |
+
# 保存结果
|
| 390 |
+
correct_output_dir = os.path.join(get_project_root(), "output")
|
| 391 |
+
save_results(user_profile, selected_paths, correct_output_dir)
|
| 392 |
+
|
| 393 |
+
# 复制文件从源位置到目标位置
|
| 394 |
+
copy_files_from_source_to_target()
|
| 395 |
except Exception as e:
|
| 396 |
print(f"Error executing select_attributes functions: {e}")
|
| 397 |
return {}
|
| 398 |
|
| 399 |
# Load basic profile information and selected paths (base info is only a reference for GPT generation)
|
| 400 |
+
project_root = get_project_root()
|
| 401 |
+
output_dir = os.path.join(project_root, "output")
|
| 402 |
+
base_info_path = os.path.join(output_dir, 'user_profile.json')
|
| 403 |
with open(base_info_path, 'r', encoding='utf-8') as f:
|
| 404 |
base_info = json.load(f)
|
| 405 |
if 'Occupations' not in base_info:
|
| 406 |
print("Warning: 'Occupations' key is missing in the user profile. Setting it to an empty list.")
|
| 407 |
base_info['Occupations'] = []
|
| 408 |
|
| 409 |
+
selected_paths_path = os.path.join(output_dir, 'selected_paths.json')
|
|
|
|
| 410 |
with open(selected_paths_path, 'r', encoding='utf-8') as f:
|
| 411 |
selected_paths = json.load(f)
|
| 412 |
|
|
|
|
| 421 |
profile = {
|
| 422 |
"Base Info": base_info,
|
| 423 |
"Generated At": time.strftime("%Y-%m-%d %H:%M:%S"),
|
| 424 |
+
"Profile Index": profile_index + 1
|
| 425 |
}
|
| 426 |
|
| 427 |
# 步骤1:生成 Demographic Information
|
| 428 |
+
life_story = base_info.get("personal_story", {}).get("personal_story", "")
|
| 429 |
demographic_input = (
|
| 430 |
"Base Information (for reference):\n" + json.dumps(base_info, ensure_ascii=False, indent=2) + "\n\n"
|
| 431 |
+
"Life Story (for reference):\n" + str(life_story) + "\n\n"
|
| 432 |
+
"Instructions: Based on the `base_info` and `life_story` provided, **develop and elaborate on** the 'Demographic Information' section in English. Your task is to **appropriately expand upon and enrich** the existing information from `base_info` and incorporate relevant insights from the `life_story`. Focus on elaborating on the given data points, adding further relevant details, or providing context to make the demographic profile more comprehensive and insightful. While you should avoid simply repeating the `base_info` verbatim, ensure that all generated content is **directly built upon and logically extends** the information available in `base_info` and `life_story`, rather than introducing entirely new, unrelated demographic facts. The goal is a coherent, more descriptive, and enhanced version of the original data that reflects the person's life experiences."
|
| 433 |
)
|
| 434 |
demographic_template = selected_paths.get("Demographic Information")
|
|
|
|
|
|
|
| 435 |
if demographic_template and demographic_template != "":
|
| 436 |
print('Generating Demographic Information...')
|
| 437 |
+
demographic_section = generate_category_attributes(demographic_template, demographic_input, "Demographic Information")
|
| 438 |
+
# 构建嵌套字典结构
|
| 439 |
+
nested_result = {}
|
| 440 |
+
for path, value in demographic_section.items():
|
| 441 |
+
parts = path.split('.')
|
| 442 |
+
if len(parts) > 1 and parts[0] == "Demographic Information":
|
| 443 |
+
parts = parts[1:]
|
| 444 |
+
|
| 445 |
+
current = nested_result
|
| 446 |
+
for i, part in enumerate(parts):
|
| 447 |
+
if i == len(parts) - 1:
|
| 448 |
+
current[part] = value
|
| 449 |
+
else:
|
| 450 |
+
if part not in current:
|
| 451 |
+
current[part] = {}
|
| 452 |
+
current = current[part]
|
| 453 |
+
profile["Demographic Information"] = nested_result
|
| 454 |
else:
|
| 455 |
print('No valid "Demographic Information" template found in selected_paths, skipping Demographic Information.')
|
| 456 |
+
|
| 457 |
# 步骤2:生成职业信息
|
| 458 |
career_template = selected_paths.get("Career and Work Identity")
|
|
|
|
|
|
|
| 459 |
if career_template and career_template != "":
|
| 460 |
print('Generating Career and Work Identity...')
|
| 461 |
# Construct input for Career and Work Identity, including Demographic Information
|
| 462 |
career_input = (
|
| 463 |
"Base Information (for reference):\n" + json.dumps(base_info, ensure_ascii=False, indent=2) + "\n\n"
|
| 464 |
+
"Life Story (for reference):\n" + str(life_story) + "\n\n"
|
| 465 |
"Demographic Information (for reference):\n" + json.dumps(profile.get("Demographic Information", {}), ensure_ascii=False, indent=2) + "\n\n"
|
| 466 |
+
"Instructions: Based on the `base_info`, `life_story`, and `Demographic Information` provided above, **develop and elaborate on** the 'Career and Work Identity' section in English. "
|
| 467 |
+
"Your aim is to distill and articulate the career identity, professional journey, and work-related aspirations that are **evident or can be reasonably inferred from the combined `base_info`, `life_story`, and `Demographic Information`**. "
|
| 468 |
"Offer fresh insights by providing a **deeper, more nuanced interpretation or by highlighting connections within the provided data** that illuminate these aspects. "
|
| 469 |
"Ensure that this elaboration is **logically consistent with and directly stems from** the provided information. "
|
| 470 |
"**Do not introduce new career details or aspirations that are not grounded in or clearly supported by the source material.** "
|
| 471 |
"The section should be an insightful and coherent expansion of what can be understood from the source material."
|
| 472 |
)
|
| 473 |
+
career_info_section = generate_category_attributes(career_template, career_input, "Career and Work Identity")
|
| 474 |
+
# 构建嵌套字典结构
|
| 475 |
+
nested_result = {}
|
| 476 |
+
for path, value in career_info_section.items():
|
| 477 |
+
parts = path.split('.')
|
| 478 |
+
if len(parts) > 1 and parts[0] == "Career and Work Identity":
|
| 479 |
+
parts = parts[1:]
|
| 480 |
+
|
| 481 |
+
current = nested_result
|
| 482 |
+
for i, part in enumerate(parts):
|
| 483 |
+
if i == len(parts) - 1:
|
| 484 |
+
current[part] = value
|
| 485 |
+
else:
|
| 486 |
+
if part not in current:
|
| 487 |
+
current[part] = {}
|
| 488 |
+
current = current[part]
|
| 489 |
+
profile["Career and Work Identity"] = nested_result
|
| 490 |
else:
|
| 491 |
print('No valid "Career and Work Identity" template found in selected_paths, skipping.')
|
|
|
|
|
|
|
| 492 |
|
| 493 |
# 步骤3:生成 Core Values, Beliefs, and Philosophy
|
| 494 |
pv_orientation = base_info.get("personal_values", {}).get("values_orientation", "")
|
| 495 |
if not isinstance(pv_orientation, str):
|
| 496 |
pv_orientation = json.dumps(pv_orientation, ensure_ascii=False)
|
| 497 |
core_input = (
|
| 498 |
+
"Life Story (for reference):\n" + str(life_story) + "\n\n"
|
| 499 |
"Demographic Information (for reference):\n" + json.dumps(profile.get("Demographic Information", {}), ensure_ascii=False, indent=2) + "\n\n"
|
| 500 |
"Career Information (for reference):\n" + json.dumps(profile.get("Career and Work Identity", {}), ensure_ascii=False, indent=2) + "\n\n"
|
| 501 |
"Personal Values (for reference):\n" + pv_orientation + "\n\n"
|
| 502 |
+
"Instructions: Based on the `life_story` and other information provided above, **develop and elaborate on** the 'Core Values, Beliefs, and Philosophy' section in English. Your aim is to distill and articulate the core values, beliefs, and philosophical outlook that are **evident or can be reasonably inferred from the `life_story` and other provided information**. Offer fresh insights by providing a **deeper, more nuanced interpretation or by highlighting connections within the provided data** that illuminate these guiding principles. Ensure that this elaboration is **logically consistent with and directly stems from** the provided information. **Do not introduce new values, beliefs, or philosophies that are not grounded in or clearly supported by the source material.** The section should be an insightful and coherent expansion of what can be understood from the source material.IMPORTANT: Avoid including anything related to community-building activities.Prohibit the use of words such as' balance 'and' balance '"
|
| 503 |
)
|
| 504 |
core_template = selected_paths.get("Core Values, Beliefs, and Philosophy")
|
|
|
|
|
|
|
| 505 |
if core_template and core_template != "":
|
| 506 |
print('Generating Core Values, Beliefs, and Philosophy...')
|
| 507 |
+
core_values_section = generate_category_attributes(core_template, core_input, "Core Values, Beliefs, and Philosophy")
|
| 508 |
+
# 构建嵌套字典结构
|
| 509 |
+
nested_result = {}
|
| 510 |
+
for path, value in core_values_section.items():
|
| 511 |
+
parts = path.split('.')
|
| 512 |
+
if len(parts) > 1 and parts[0] == "Core Values, Beliefs, and Philosophy":
|
| 513 |
+
parts = parts[1:]
|
| 514 |
+
|
| 515 |
+
current = nested_result
|
| 516 |
+
for i, part in enumerate(parts):
|
| 517 |
+
if i == len(parts) - 1:
|
| 518 |
+
current[part] = value
|
| 519 |
+
else:
|
| 520 |
+
if part not in current:
|
| 521 |
+
current[part] = {}
|
| 522 |
+
current = current[part]
|
| 523 |
+
profile["Core Values, Beliefs, and Philosophy"] = nested_result
|
| 524 |
else:
|
| 525 |
print('No valid "Core Values, Beliefs, and Philosophy" template found in selected_paths, skipping.')
|
| 526 |
|
| 527 |
+
# 步骤4:生成 Lifestyle and Daily Routine
|
| 528 |
life_attitude = base_info["life_attitude"]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 529 |
lifestyle_input = (
|
| 530 |
+
"Life Story (for reference):\n" + str(life_story) + "\n\n"
|
| 531 |
+
"Life Attitude (for reference):\n" + life_attitude + "\n\n"
|
| 532 |
+
"Demographic Information (for reference):\n" + json.dumps(profile.get("Demographic Information", {}), ensure_ascii=False, indent=2) + "\n\n"
|
| 533 |
+
"Career Information (for reference):\n" + json.dumps(profile.get("Career and Work Identity", {}), ensure_ascii=False, indent=2) + "\n\n"
|
| 534 |
+
"Core Values (for reference):\n" + json.dumps(profile.get("Core Values, Beliefs, and Philosophy", {}), ensure_ascii=False, indent=2) + "\n\n"
|
| 535 |
+
"Instructions: Based on the `life_story`, `life_attitude`, and other information provided above, generate detailed Lifestyle and Daily Routine section in English. Use the life story to inform realistic daily routines that align with the person's experiences and background.Prohibit the use of words such as' balance 'and' balance '"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 536 |
)
|
|
|
|
| 537 |
lifestyle_template = selected_paths.get("Lifestyle and Daily Routine")
|
|
|
|
|
|
|
| 538 |
if lifestyle_template and lifestyle_template != "":
|
| 539 |
print('Generating Lifestyle and Daily Routine...')
|
| 540 |
+
lifestyle_section = generate_category_attributes(lifestyle_template, lifestyle_input, "Lifestyle and Daily Routine")
|
| 541 |
+
# 构建嵌套字典结构
|
| 542 |
+
nested_result = {}
|
| 543 |
+
for path, value in lifestyle_section.items():
|
| 544 |
+
parts = path.split('.')
|
| 545 |
+
if len(parts) > 1 and parts[0] == "Lifestyle and Daily Routine":
|
| 546 |
+
parts = parts[1:]
|
| 547 |
+
|
| 548 |
+
current = nested_result
|
| 549 |
+
for i, part in enumerate(parts):
|
| 550 |
+
if i == len(parts) - 1:
|
| 551 |
+
current[part] = value
|
| 552 |
+
else:
|
| 553 |
+
if part not in current:
|
| 554 |
+
current[part] = {}
|
| 555 |
+
current = current[part]
|
| 556 |
+
profile["Lifestyle and Daily Routine"] = nested_result
|
| 557 |
else:
|
| 558 |
print('No valid "Lifestyle and Daily Routine" template found in selected_paths, skipping.')
|
| 559 |
+
|
| 560 |
+
# 步骤5:生成 Cultural and Social Context
|
| 561 |
+
cultural_input = (
|
| 562 |
+
"Life Story (for reference):\n" + str(life_story) + "\n\n"
|
| 563 |
+
"Life Attitude (for reference):\n" + life_attitude + "\n\n"
|
| 564 |
+
"Demographic Information (for reference):\n" + json.dumps(profile.get("Demographic Information", {}), ensure_ascii=False, indent=2) + "\n\n"
|
| 565 |
+
"Career Information (for reference):\n" + json.dumps(profile.get("Career and Work Identity", {}), ensure_ascii=False, indent=2) + "\n\n"
|
| 566 |
+
"Core Values (for reference):\n" + json.dumps(profile.get("Core Values, Beliefs, and Philosophy", {}), ensure_ascii=False, indent=2) + "\n\n"
|
| 567 |
+
"Lifestyle (for reference):\n" + json.dumps(profile.get("Lifestyle and Daily Routine", {}), ensure_ascii=False, indent=2) + "\n\n"
|
| 568 |
+
"Instructions: Based on the `life_story`, `life_attitude`, and other information provided above, generate detailed Cultural and Social Context section in English. Use the life story to inform realistic cultural contexts that align with the person's experiences and background.Prohibit the use of words such as' balance 'and' balance '"
|
| 569 |
+
)
|
| 570 |
cultural_template = selected_paths.get("Cultural and Social Context")
|
|
|
|
|
|
|
| 571 |
if cultural_template and cultural_template != "":
|
| 572 |
print('Generating Cultural and Social Context...')
|
| 573 |
+
cultural_section = generate_category_attributes(cultural_template, cultural_input, "Cultural and Social Context")
|
| 574 |
+
# 构建嵌套字典结构
|
| 575 |
+
nested_result = {}
|
| 576 |
+
for path, value in cultural_section.items():
|
| 577 |
+
parts = path.split('.')
|
| 578 |
+
if len(parts) > 1 and parts[0] == "Cultural and Social Context":
|
| 579 |
+
parts = parts[1:]
|
| 580 |
+
|
| 581 |
+
current = nested_result
|
| 582 |
+
for i, part in enumerate(parts):
|
| 583 |
+
if i == len(parts) - 1:
|
| 584 |
+
current[part] = value
|
| 585 |
+
else:
|
| 586 |
+
if part not in current:
|
| 587 |
+
current[part] = {}
|
| 588 |
+
current = current[part]
|
| 589 |
+
profile["Cultural and Social Context"] = nested_result
|
| 590 |
else:
|
| 591 |
print('No valid "Cultural and Social Context" template found in selected_paths, skipping.')
|
| 592 |
|
| 593 |
+
# 步骤6:生成 Hobbies, Interests, and Lifestyle
|
| 594 |
interests = base_info["interests"]
|
| 595 |
hobbies_input = (
|
| 596 |
"Base Information (for reference):\n" + json.dumps(base_info, ensure_ascii=False, indent=2) + "\n\n"
|
| 597 |
+
"Life Story (for reference):\n" + str(life_story) + "\n\n"
|
| 598 |
"Demographic Information (for reference):\n" + json.dumps(profile.get("Demographic Information", {}), ensure_ascii=False, indent=2) + "\n\n"
|
| 599 |
"Career Information (for reference):\n" + json.dumps(profile.get("Career and Work Identity", {}), ensure_ascii=False, indent=2) + "\n\n"
|
| 600 |
"Core Values, Beliefs, and Philosophy (for reference):\n" + json.dumps(profile.get("Core Values, Beliefs, and Philosophy", {}), ensure_ascii=False, indent=2) + "\n\n"
|
| 601 |
"Lifestyle and Daily Routine (for reference):\n" + json.dumps(profile.get("Lifestyle and Daily Routine", {}), ensure_ascii=False, indent=2) + "\n\n"
|
| 602 |
"Cultural and Social Context (for reference):\n" + json.dumps(profile.get("Cultural and Social Context", {}), ensure_ascii=False, indent=2) + "\n\n"
|
| 603 |
+
"Ensure that all hobbies, interests, and lifestyle choices presented are:1. **Firmly anchored to and primarily derived from the hobbies indicated in `base_info` and experiences from `life_story`.**2. Logically consistent with all provided information.3. Enriched by supplementary information where appropriate, without overshadowing the core hobbies from `base_info`.**Do not introduce new primary hobbies or interests that are not clearly supported by or cannot be reasonably inferred from the `base_info` and `life_story` themselves.** Any lifestyle elements should logically flow from or align with these established hobbies and the overall profile.Prohibit the use of words such as' balance 'and' balance '"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 604 |
)
|
|
|
|
| 605 |
hobbies_template = selected_paths.get("Hobbies, Interests, and Lifestyle")
|
|
|
|
|
|
|
| 606 |
if hobbies_template and hobbies_template != "":
|
| 607 |
print('Generating Hobbies, Interests, and Lifestyle...')
|
| 608 |
+
hobbies_section = generate_category_attributes(hobbies_template, hobbies_input, "Hobbies, Interests, and Lifestyle")
|
| 609 |
+
# 构建嵌套字典结构
|
| 610 |
+
nested_result = {}
|
| 611 |
+
for path, value in hobbies_section.items():
|
| 612 |
+
parts = path.split('.')
|
| 613 |
+
if len(parts) > 1 and parts[0] == "Hobbies, Interests, and Lifestyle":
|
| 614 |
+
parts = parts[1:]
|
| 615 |
+
|
| 616 |
+
current = nested_result
|
| 617 |
+
for i, part in enumerate(parts):
|
| 618 |
+
if i == len(parts) - 1:
|
| 619 |
+
current[part] = value
|
| 620 |
+
else:
|
| 621 |
+
if part not in current:
|
| 622 |
+
current[part] = {}
|
| 623 |
+
current = current[part]
|
| 624 |
+
profile["Hobbies, Interests, and Lifestyle"] = nested_result
|
| 625 |
else:
|
| 626 |
print('No valid "Hobbies, Interests, and Lifestyle" template found in selected_paths, skipping.')
|
| 627 |
|
| 628 |
+
# 步骤7:生成 Other Attributes
|
| 629 |
other_attributes_input = (
|
| 630 |
+
"Life Story (for reference):\n" + str(life_story) + "\n\n"
|
| 631 |
"Complete Profile (for reference):\n" + json.dumps(profile, ensure_ascii=False, indent=2) + "\n\n"
|
| 632 |
+
"Instructions: Based on the `life_story` and complete profile, generate the remaining attributes for the user profile in English with refined details. Ensure that all attributes are consistent with the person's life experiences as described in the life story."
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 633 |
)
|
| 634 |
other_template = selected_paths.get("Other Attributes")
|
|
|
|
|
|
|
| 635 |
if other_template and other_template != "":
|
| 636 |
print('Generating Other Attributes...')
|
| 637 |
+
other_attributes_section = generate_category_attributes(other_template, other_attributes_input, "Other Attributes")
|
| 638 |
+
# 构建嵌套字典结构
|
| 639 |
+
nested_result = {}
|
| 640 |
+
for path, value in other_attributes_section.items():
|
| 641 |
+
parts = path.split('.')
|
| 642 |
+
if len(parts) > 1 and parts[0] == "Other Attributes":
|
| 643 |
+
parts = parts[1:]
|
| 644 |
+
|
| 645 |
+
current = nested_result
|
| 646 |
+
for i, part in enumerate(parts):
|
| 647 |
+
if i == len(parts) - 1:
|
| 648 |
+
current[part] = value
|
| 649 |
+
else:
|
| 650 |
+
if part not in current:
|
| 651 |
+
current[part] = {}
|
| 652 |
+
current = current[part]
|
| 653 |
+
profile["Other Attributes"] = nested_result
|
| 654 |
else:
|
| 655 |
print('No valid "Other Attributes" template found in selected_paths, skipping.')
|
| 656 |
|
|
|
|
| 659 |
for key in ['base_info', 'Base Info', 'personal_story', 'interests', 'Occupations']:
|
| 660 |
profile_for_summary.pop(key, None)
|
| 661 |
|
| 662 |
+
# Generate the final summary using the filtered profile and base_info
|
| 663 |
+
final_summary_text = generate_final_summary(profile_for_summary, base_info)
|
| 664 |
profile["Summary"] = final_summary_text
|
| 665 |
|
| 666 |
# Remove unwanted keys from the final profile
|
| 667 |
for key in ['base_info', 'Base Info', 'personal_story', 'interests', 'Occupations']:
|
| 668 |
profile.pop(key, None)
|
| 669 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 670 |
return profile
|
| 671 |
|
| 672 |
|
| 673 |
+
def generate_multiple_profiles(num_rounds: int = 8) -> None:
|
| 674 |
+
"""生成多轮完整的用户档案,每轮包含不同数量的属性,并将它们保存到一个合并的 JSON 文件中。
|
| 675 |
|
| 676 |
参数:
|
| 677 |
+
num_rounds: 要生成的轮数,默认为8轮,每轮会生成8种不同属性数量的档案。
|
| 678 |
"""
|
| 679 |
start_time = time.time()
|
| 680 |
+
print(f"开始生成 {num_rounds} 轮个人资料,每轮包含8种不同数量的属性...")
|
| 681 |
|
| 682 |
# 获取项目根目录
|
| 683 |
project_root = get_project_root()
|
| 684 |
|
| 685 |
# 创建输出目录
|
| 686 |
+
output_dir = "/home/zhou/deeppersona/generate_user_profile_final/output"
|
| 687 |
os.makedirs(output_dir, exist_ok=True)
|
| 688 |
|
| 689 |
+
# 定义每个档案的属性数量
|
| 690 |
+
attribute_counts = [100, 150, 200, 250, 300, 350]
|
| 691 |
+
total_profiles = num_rounds * len(attribute_counts)
|
| 692 |
|
| 693 |
# 初始化存储所有配置文件的字典
|
| 694 |
all_profiles = {
|
| 695 |
"metadata": {
|
| 696 |
"profiles_completed": 0,
|
| 697 |
"total_profiles": total_profiles,
|
| 698 |
+
"total_rounds": num_rounds,
|
| 699 |
+
"description": "包含多轮不同属性数量的用户档案集合"
|
| 700 |
}
|
| 701 |
}
|
| 702 |
|
| 703 |
+
# 设置合并文件路径(不使用时间戳)
|
| 704 |
+
base_all_profiles_path = os.path.join(output_dir, f"profile_ind.json")
|
| 705 |
+
all_profiles_path = base_all_profiles_path
|
| 706 |
|
| 707 |
# 初始化保存合并文件
|
| 708 |
+
actual_path = save_json_file(all_profiles_path, all_profiles, use_timestamp=False)
|
| 709 |
+
print(f"初始化合并文件: {actual_path}")
|
| 710 |
+
all_profiles_path = actual_path # 使用实际保存的路径
|
| 711 |
|
| 712 |
# 计数器,用于跟踪总共生成的档案数量
|
| 713 |
profile_count = 0
|
| 714 |
|
| 715 |
+
# 逐轮生成配置文件
|
| 716 |
+
for round_num in range(num_rounds):
|
| 717 |
+
print(f"\n===== 开始生成第 {round_num+1}/{num_rounds} 轮用户资料 =====\n")
|
|
|
|
|
|
|
| 718 |
|
| 719 |
+
# 在每轮中生成所有不同属性数量的档案
|
| 720 |
+
for attr_index, current_attribute_count in enumerate(attribute_counts):
|
| 721 |
+
profile_count += 1
|
|
|
|
|
|
|
|
|
|
|
|
|
| 722 |
|
| 723 |
+
print(f"\n----- 开始生成第 {round_num+1}.{attr_index+1} 个用户资料 (属性数量: {current_attribute_count}) -----\n")
|
|
|
|
|
|
|
|
|
|
| 724 |
|
| 725 |
+
try:
|
| 726 |
+
# 生成单个配置文件,传入属性数量
|
| 727 |
+
profile = generate_single_profile(None, profile_count-1, current_attribute_count)
|
| 728 |
+
|
| 729 |
+
if not profile:
|
| 730 |
+
print(f"第 {round_num+1}.{attr_index+1} 个资料生成失败,跳过")
|
| 731 |
+
continue
|
| 732 |
+
|
| 733 |
+
# 添加到总字典并保存
|
| 734 |
+
profile_key = f"Profile_R{round_num+1}_A{attr_index+1}_Count_{current_attribute_count}"
|
| 735 |
+
all_profiles[profile_key] = profile
|
| 736 |
+
all_profiles["metadata"]["profiles_completed"] = profile_count
|
| 737 |
+
|
| 738 |
+
# 保存更新后的合并文件
|
| 739 |
+
save_json_file(all_profiles_path, all_profiles, use_timestamp=False)
|
| 740 |
+
print(f"\n总进度更新: {profile_count}/{total_profiles} 个资料已完成 (第 {round_num+1}/{num_rounds} 轮)")
|
| 741 |
+
print(f"已将第 {round_num+1}.{attr_index+1} 个用户资料 (属性数量: {current_attribute_count}) 添加到合并文件: {all_profiles_path}")
|
| 742 |
+
print("\n" + "-"*50 + "\n")
|
| 743 |
+
except Exception as e:
|
| 744 |
+
print(f"生成第 {round_num+1}.{attr_index+1} 个个人资料时出错: {e}")
|
| 745 |
+
continue
|
| 746 |
+
|
| 747 |
+
print(f"\n===== 第 {round_num+1}/{num_rounds} 轮用户资料生成完成 =====\n")
|
| 748 |
+
print("\n" + "="*50 + "\n")
|
| 749 |
|
| 750 |
# 添加生成完成状态
|
| 751 |
all_profiles["metadata"]["status"] = "completed"
|
| 752 |
+
save_json_file(all_profiles_path, all_profiles, use_timestamp=False)
|
| 753 |
|
| 754 |
end_time = time.time()
|
| 755 |
elapsed_time = end_time - start_time
|
|
|
|
| 757 |
print(f"生成完成,耗时 {elapsed_time:.2f} 秒")
|
| 758 |
|
| 759 |
if __name__ == "__main__":
|
| 760 |
+
generate_multiple_profiles(10)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
generate_user_profile_final/code/read_profile_summaries.py
ADDED
|
@@ -0,0 +1,134 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
#!/usr/bin/env python3
|
| 2 |
+
# -*- coding: utf-8 -*-
|
| 3 |
+
|
| 4 |
+
"""
|
| 5 |
+
读取用户档案JSON文件中每个profile的summary项
|
| 6 |
+
"""
|
| 7 |
+
|
| 8 |
+
import json
|
| 9 |
+
import os
|
| 10 |
+
from typing import List, Dict, Any
|
| 11 |
+
|
| 12 |
+
def read_profile_summaries(json_file_path: str, max_profiles: int = None) -> List[Dict[str, Any]]:
|
| 13 |
+
"""
|
| 14 |
+
读取JSON文件中每个profile的summary项
|
| 15 |
+
|
| 16 |
+
参数:
|
| 17 |
+
json_file_path: JSON文件路径
|
| 18 |
+
max_profiles: 最大读取的profile数量,默认None表示读取所有
|
| 19 |
+
|
| 20 |
+
返回:
|
| 21 |
+
List[Dict]: 包含profile_id和summary的字典列表
|
| 22 |
+
"""
|
| 23 |
+
try:
|
| 24 |
+
with open(json_file_path, 'r', encoding='utf-8') as f:
|
| 25 |
+
data = json.load(f)
|
| 26 |
+
|
| 27 |
+
summaries = []
|
| 28 |
+
count = 0
|
| 29 |
+
|
| 30 |
+
# 遍历所有profile,但限制数量
|
| 31 |
+
for key, value in data.items():
|
| 32 |
+
# 跳过metadata项
|
| 33 |
+
if key == "metadata":
|
| 34 |
+
continue
|
| 35 |
+
|
| 36 |
+
# 检查是否达到最大数量
|
| 37 |
+
if max_profiles is not None and count >= max_profiles:
|
| 38 |
+
break
|
| 39 |
+
|
| 40 |
+
# 检查是否是profile项(通常以Profile_开头)
|
| 41 |
+
if isinstance(value, dict) and "Summary" in value:
|
| 42 |
+
profile_info = {
|
| 43 |
+
"profile_id": key,
|
| 44 |
+
"summary": value["Summary"]
|
| 45 |
+
}
|
| 46 |
+
summaries.append(profile_info)
|
| 47 |
+
count += 1
|
| 48 |
+
|
| 49 |
+
if max_profiles is not None:
|
| 50 |
+
print(f"成功读取 {len(summaries)} 个profile的summary (限制: {max_profiles})")
|
| 51 |
+
else:
|
| 52 |
+
print(f"成功读取 {len(summaries)} 个profile的summary (读取所有)")
|
| 53 |
+
return summaries
|
| 54 |
+
|
| 55 |
+
except FileNotFoundError:
|
| 56 |
+
print(f"错误: 文件 {json_file_path} 不存在")
|
| 57 |
+
return []
|
| 58 |
+
except json.JSONDecodeError as e:
|
| 59 |
+
print(f"错误: JSON解析失败 - {e}")
|
| 60 |
+
return []
|
| 61 |
+
except Exception as e:
|
| 62 |
+
print(f"错误: {e}")
|
| 63 |
+
return []
|
| 64 |
+
|
| 65 |
+
def save_summaries_to_file(summaries: List[Dict[str, Any]], output_file: str):
|
| 66 |
+
"""
|
| 67 |
+
将summaries保存到文件
|
| 68 |
+
|
| 69 |
+
参数:
|
| 70 |
+
summaries: summary数据列表
|
| 71 |
+
output_file: 输出文件路径
|
| 72 |
+
"""
|
| 73 |
+
try:
|
| 74 |
+
with open(output_file, 'w', encoding='utf-8') as f:
|
| 75 |
+
json.dump(summaries, f, ensure_ascii=False, indent=2)
|
| 76 |
+
print(f"summaries已保存到: {output_file}")
|
| 77 |
+
except Exception as e:
|
| 78 |
+
print(f"保存文件时出错: {e}")
|
| 79 |
+
|
| 80 |
+
def print_summary_stats(summaries: List[Dict[str, Any]]):
|
| 81 |
+
"""
|
| 82 |
+
打印summary统计信息
|
| 83 |
+
|
| 84 |
+
参数:
|
| 85 |
+
summaries: summary数据列表
|
| 86 |
+
"""
|
| 87 |
+
if not summaries:
|
| 88 |
+
print("没有找到任何summary数据")
|
| 89 |
+
return
|
| 90 |
+
|
| 91 |
+
total_count = len(summaries)
|
| 92 |
+
total_length = sum(len(item["summary"]) for item in summaries)
|
| 93 |
+
avg_length = total_length / total_count if total_count > 0 else 0
|
| 94 |
+
|
| 95 |
+
print(f"\n=== Summary统计信息 ===")
|
| 96 |
+
print(f"总数量: {total_count}")
|
| 97 |
+
print(f"平均长度: {avg_length:.1f} 字符")
|
| 98 |
+
print(f"总长度: {total_length} 字符")
|
| 99 |
+
|
| 100 |
+
# 显示前3个profile的summary示例
|
| 101 |
+
print(f"\n=== 前3个Profile的Summary示例 ===")
|
| 102 |
+
for i, item in enumerate(summaries[:3]):
|
| 103 |
+
print(f"\n{i+1}. Profile ID: {item['profile_id']}")
|
| 104 |
+
summary_preview = item['summary'][:200] + "..." if len(item['summary']) > 200 else item['summary']
|
| 105 |
+
print(f" Summary: {summary_preview}")
|
| 106 |
+
|
| 107 |
+
def main():
|
| 108 |
+
"""主函数"""
|
| 109 |
+
# 输入文件路径
|
| 110 |
+
input_file = "/home/zhou/deeppersona/generate_user_profile_test/output/profile_world.json"
|
| 111 |
+
|
| 112 |
+
# 输出文件路径
|
| 113 |
+
output_file = "/home/zhou/deeppersona/generate_user_profile_final/output/summary_world.json"
|
| 114 |
+
|
| 115 |
+
print(f"开始读取文件: {input_file}")
|
| 116 |
+
|
| 117 |
+
# 读取summaries
|
| 118 |
+
summaries = read_profile_summaries(input_file)
|
| 119 |
+
|
| 120 |
+
if summaries:
|
| 121 |
+
# 打印统计信息
|
| 122 |
+
print_summary_stats(summaries)
|
| 123 |
+
|
| 124 |
+
# 保存到文件
|
| 125 |
+
save_summaries_to_file(summaries, output_file)
|
| 126 |
+
|
| 127 |
+
# 返回结果供其他模块使用
|
| 128 |
+
return summaries
|
| 129 |
+
else:
|
| 130 |
+
print("未能读取到任何summary数据")
|
| 131 |
+
return []
|
| 132 |
+
|
| 133 |
+
if __name__ == "__main__":
|
| 134 |
+
summaries = main()
|
{generation_user_profile → generate_user_profile_final}/code/select_attributes.py
RENAMED
|
@@ -55,19 +55,17 @@ logging.basicConfig(
|
|
| 55 |
logger = logging.getLogger(__name__)
|
| 56 |
|
| 57 |
# 属性数据集路径
|
| 58 |
-
#
|
| 59 |
-
ATTRIBUTES_PATH = os.path.join(os.path.dirname(__file__), "data", "large_attributes.json") # 属性数据集路径
|
| 60 |
|
| 61 |
# 向量数据库路径
|
| 62 |
-
#
|
| 63 |
-
EMBEDDINGS_PATH = os.path.join(os.path.dirname(__file__), "data", "attribute_embeddings.pkl") # 属性嵌入向量路径
|
| 64 |
|
| 65 |
# 默认模型来自配置
|
| 66 |
DEFAULT_MODEL = GPT_MODEL
|
| 67 |
|
| 68 |
# 向量搜索参数
|
| 69 |
-
NEAR_NEIGHBOR_COUNT =
|
| 70 |
-
MID_NEIGHBOR_COUNT =
|
| 71 |
FAR_NEIGHBOR_COUNT = 1 # 远距离邻居数量
|
| 72 |
DIVERSITY_THRESHOLD = 0.7 # 多样性阈值(余弦相似度)
|
| 73 |
|
|
@@ -95,37 +93,29 @@ class AttributeSelector:
|
|
| 95 |
# 设置用户配置文件
|
| 96 |
self.user_profile = user_profile
|
| 97 |
|
| 98 |
-
#
|
| 99 |
-
self.
|
| 100 |
|
| 101 |
-
#
|
| 102 |
self.embeddings_data = self._load_embeddings()
|
|
|
|
|
|
|
|
|
|
| 103 |
self.paths = []
|
| 104 |
self.embeddings = []
|
| 105 |
|
| 106 |
-
# 处理嵌入向量数据
|
| 107 |
if self.embeddings_data:
|
| 108 |
-
|
| 109 |
-
|
| 110 |
-
embeddings_key = 'embeddings'
|
| 111 |
|
| 112 |
-
|
| 113 |
-
self.paths = self.embeddings_data[paths_key]
|
| 114 |
-
if embeddings_key in self.embeddings_data:
|
| 115 |
-
self.embeddings = self.embeddings_data[embeddings_key]
|
| 116 |
-
|
| 117 |
-
# 创建路径到嵌入向量的映射
|
| 118 |
for i, path in enumerate(self.paths):
|
| 119 |
if i < len(self.embeddings):
|
| 120 |
self.path_to_embedding[path] = self.embeddings[i]
|
| 121 |
-
|
| 122 |
logger.info(f"已加载 {len(self.paths)} 条属性路径和对应的向量嵌入")
|
| 123 |
|
| 124 |
-
|
| 125 |
-
self._validate_data()
|
| 126 |
-
|
| 127 |
-
# 记录顶级类别数量
|
| 128 |
-
logger.info(f"已加载属性,包含 {len(self._get_attribute_categories())} 个顶级类别")
|
| 129 |
|
| 130 |
def _load_json(self, file_path: str) -> Dict:
|
| 131 |
"""从文件加载JSON数据"""
|
|
@@ -179,75 +169,9 @@ class AttributeSelector:
|
|
| 179 |
if "paths" not in self.attributes:
|
| 180 |
logger.info("正在将属性从嵌套字典格式转换为路径格式")
|
| 181 |
self.attributes = {"paths": self._flatten_attributes(self.attributes)}
|
| 182 |
-
|
| 183 |
-
# 检查是否有匹配的路径
|
| 184 |
-
if hasattr(self, 'embeddings_data') and self.embeddings_data:
|
| 185 |
-
paths_key = 'attribute_paths' if 'attribute_paths' in self.embeddings_data else 'paths'
|
| 186 |
-
if paths_key in self.embeddings_data:
|
| 187 |
-
embedding_paths = set(self.embeddings_data[paths_key])
|
| 188 |
-
matching_paths = [p for p in self.attributes["paths"] if p in embedding_paths]
|
| 189 |
-
logger.info(f"从 {len(self.attributes['paths'])} 条提取路径中找到 {len(matching_paths)} 条与嵌入向量匹配的路径")
|
| 190 |
-
|
| 191 |
-
# 如果没有匹配的路径,直接使用嵌入向量中的路径
|
| 192 |
-
if not matching_paths:
|
| 193 |
-
logger.warning("没有找到匹配的路径,直接使用嵌入向量中的路径")
|
| 194 |
-
self.attributes["paths"] = self.embeddings_data[paths_key]
|
| 195 |
else:
|
| 196 |
raise ValueError("无效的属性格式:不是字典")
|
| 197 |
|
| 198 |
-
def _get_attribute_categories(self) -> List[str]:
|
| 199 |
-
"""获取顶级属性类别"""
|
| 200 |
-
# 从路径中提取唯一的顶级类别
|
| 201 |
-
return sorted({path.split('.')[0] for path in self.attributes["paths"] if '.' in path})
|
| 202 |
-
|
| 203 |
-
def _flatten_attributes(self, attributes: Dict, prefix: str = "") -> List[str]:
|
| 204 |
-
"""
|
| 205 |
-
将属性字典扁平化为属性路径列表
|
| 206 |
-
|
| 207 |
-
参数:
|
| 208 |
-
attributes: 属性字典或子字典
|
| 209 |
-
prefix: 当��路径前缀
|
| 210 |
-
"""
|
| 211 |
-
result = []
|
| 212 |
-
|
| 213 |
-
# 如果有嵌入向量数据,打印样例路径作为参考
|
| 214 |
-
if hasattr(self, 'embeddings_data') and self.embeddings_data:
|
| 215 |
-
paths_key = 'attribute_paths' if 'attribute_paths' in self.embeddings_data else 'paths'
|
| 216 |
-
if paths_key in self.embeddings_data and len(self.embeddings_data[paths_key]) > 0:
|
| 217 |
-
sample_paths = self.embeddings_data[paths_key][:5]
|
| 218 |
-
logger.info(f"嵌入向量中的路径样例: {sample_paths}")
|
| 219 |
-
|
| 220 |
-
# 打印所有嵌入向量中的顶级类别
|
| 221 |
-
top_categories = set()
|
| 222 |
-
for path in self.embeddings_data[paths_key]:
|
| 223 |
-
if '.' in path:
|
| 224 |
-
top_categories.add(path.split('.')[0])
|
| 225 |
-
logger.info(f"嵌入向量中的顶级类别: {sorted(list(top_categories))}")
|
| 226 |
-
|
| 227 |
-
def _flatten(attr_dict, curr_prefix):
|
| 228 |
-
for k, v in attr_dict.items():
|
| 229 |
-
path = f"{curr_prefix}.{k}" if curr_prefix else k
|
| 230 |
-
|
| 231 |
-
# 检查是否是叶子节点或有描述的节点
|
| 232 |
-
if isinstance(v, dict):
|
| 233 |
-
# 总是添加路径,无论是否有描述,以匹配嵌入向量中的路径格式
|
| 234 |
-
result.append(path)
|
| 235 |
-
|
| 236 |
-
# 继续递归处理子节点
|
| 237 |
-
if len(v) > 0: # 非空字典,继续递归
|
| 238 |
-
_flatten(v, path)
|
| 239 |
-
else: # 非字典值,直接添加
|
| 240 |
-
result.append(path)
|
| 241 |
-
|
| 242 |
-
_flatten(attributes, prefix)
|
| 243 |
-
logger.info(f"从属性字典中提取了 {len(result)} 条路径")
|
| 244 |
-
|
| 245 |
-
# 打印一些提取的路径样例,用于调试
|
| 246 |
-
if result:
|
| 247 |
-
logger.info(f"提取的路径样例: {result[:5]}")
|
| 248 |
-
|
| 249 |
-
return result
|
| 250 |
-
|
| 251 |
def _create_profile_embedding(self, profile: Dict) -> np.ndarray:
|
| 252 |
"""
|
| 253 |
为用户配置文件创建嵌入向量
|
|
@@ -432,13 +356,50 @@ class AttributeSelector:
|
|
| 432 |
if interests and isinstance(interests, list):
|
| 433 |
summary_parts.append(f"Interests: {', '.join(interests)}")
|
| 434 |
|
| 435 |
-
# Add
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 436 |
if "summary" in profile:
|
| 437 |
summary_parts.append(f"Profile Summary: {profile['summary']}")
|
| 438 |
|
| 439 |
-
#
|
|
|
|
| 440 |
return "\n".join(summary_parts)
|
| 441 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 442 |
def _format_attributes_tree(self, attributes_dict: Dict, prefix: str = "", depth: int = 0) -> List[str]:
|
| 443 |
"""
|
| 444 |
将属性字典格式化为文本格式的树结构
|
|
@@ -685,32 +646,37 @@ class AttributeSelector:
|
|
| 685 |
selected_paths = []
|
| 686 |
used_indices = set()
|
| 687 |
|
| 688 |
-
#
|
| 689 |
-
|
|
|
|
|
|
|
|
|
|
| 690 |
near_indices = list(range(near_count))
|
| 691 |
-
for i in random.sample(near_indices, near_count):
|
| 692 |
if i not in used_indices:
|
| 693 |
selected_paths.append(path_similarities[i][0])
|
| 694 |
used_indices.add(i)
|
| 695 |
|
| 696 |
-
# 2. 选择中距离邻居
|
| 697 |
mid_start = total_paths // 3
|
| 698 |
mid_end = 2 * total_paths // 3
|
| 699 |
-
mid_count = min(int(target_count *
|
| 700 |
mid_indices = list(range(mid_start, mid_end))
|
| 701 |
-
|
| 702 |
-
|
| 703 |
-
|
| 704 |
-
|
|
|
|
| 705 |
|
| 706 |
-
# 3. 选择远距离邻居(相似度最低的属性)
|
| 707 |
far_start = 2 * total_paths // 3
|
| 708 |
-
far_count = min(int(target_count *
|
| 709 |
far_indices = list(range(far_start, total_paths))
|
| 710 |
-
|
| 711 |
-
|
| 712 |
-
|
| 713 |
-
|
|
|
|
| 714 |
|
| 715 |
# 如果还需要更多属性来达到目标数量,从未使用的索引中随机选择
|
| 716 |
remaining_count = target_count - len(selected_paths)
|
|
@@ -724,12 +690,13 @@ class AttributeSelector:
|
|
| 724 |
logger.info(f"使用向量搜索选择了 {len(selected_paths)} 条属性(近邻: {near_count}, 中距离: {mid_count}, 远距离: {far_count})")
|
| 725 |
return selected_paths
|
| 726 |
|
| 727 |
-
def get_top_attributes(self, result: Dict) -> List[str]:
|
| 728 |
"""
|
| 729 |
获取属性列表
|
| 730 |
|
| 731 |
参数:
|
| 732 |
result: 来自analyze_profile_for_attributes的结果
|
|
|
|
| 733 |
|
| 734 |
返回:
|
| 735 |
属性路径列表
|
|
@@ -763,9 +730,7 @@ class AttributeSelector:
|
|
| 763 |
all_paths.extend(paths)
|
| 764 |
category_paths[category] = paths
|
| 765 |
|
| 766 |
-
# 随机选择
|
| 767 |
-
attribute_count_options = [250, 300, 350]
|
| 768 |
-
target_count = random.choice(attribute_count_options)
|
| 769 |
|
| 770 |
# 如果有向量数据库,使用向量搜索
|
| 771 |
if self.embeddings_data and self.user_profile:
|
|
@@ -778,7 +743,7 @@ class AttributeSelector:
|
|
| 778 |
for category, paths in category_paths.items():
|
| 779 |
# 根据类别大小按比例分配目标数量
|
| 780 |
category_ratio = len(paths) / len(all_paths)
|
| 781 |
-
category_target = max(
|
| 782 |
|
| 783 |
# 使用向量搜索选择该类别的属性
|
| 784 |
category_selected = self._find_interesting_neighbors(
|
|
@@ -793,31 +758,9 @@ class AttributeSelector:
|
|
| 793 |
logger.info(f"使用向量搜索从 {len(all_paths)} 条属性中选择了 {len(final_paths)} 条属性")
|
| 794 |
return final_paths
|
| 795 |
|
| 796 |
-
# 如果没有向量数据库或向量搜索失败,
|
| 797 |
-
logger.warning(f"没有可用的向量数据库或向量搜索失败,
|
| 798 |
-
|
| 799 |
-
# 创建基本属性路径列表
|
| 800 |
-
basic_paths = [
|
| 801 |
-
"Demographic Information.Age",
|
| 802 |
-
"Demographic Information.Gender",
|
| 803 |
-
"Demographic Information.Location.Country",
|
| 804 |
-
"Demographic Information.Location.City",
|
| 805 |
-
"Career and Work Identity.Occupation",
|
| 806 |
-
"Career and Work Identity.Work Experience",
|
| 807 |
-
"Core Values, Beliefs, and Philosophy.Personal Values",
|
| 808 |
-
"Core Values, Beliefs, and Philosophy.Life Philosophy",
|
| 809 |
-
"Lifestyle and Daily Routine.Daily Habits",
|
| 810 |
-
"Lifestyle and Daily Routine.Lifestyle Choices",
|
| 811 |
-
"Cultural and Social Context.Cultural Background",
|
| 812 |
-
"Cultural and Social Context.Social Connections",
|
| 813 |
-
"Hobbies, Interests, and Lifestyle.Hobbies",
|
| 814 |
-
"Hobbies, Interests, and Lifestyle.Interests",
|
| 815 |
-
"Other Attributes.Personal Story",
|
| 816 |
-
"Other Attributes.Key Life Events"
|
| 817 |
-
]
|
| 818 |
-
|
| 819 |
-
logger.info(f"使用简单方法选择了 {len(basic_paths)} 个基本属性路径")
|
| 820 |
-
return basic_paths
|
| 821 |
|
| 822 |
except Exception as e:
|
| 823 |
logger.error(f"Error generating attribute list: {e}")
|
|
@@ -881,10 +824,11 @@ def generate_user_profile() -> Dict:
|
|
| 881 |
|
| 882 |
return user_profile
|
| 883 |
|
| 884 |
-
def get_selected_attributes(user_profile=None):
|
| 885 |
global ATTRIBUTE_SELECTION_CACHE
|
| 886 |
-
|
| 887 |
-
|
|
|
|
| 888 |
|
| 889 |
try:
|
| 890 |
# 如果没有提供用户配置文件,生成一个
|
|
@@ -900,8 +844,8 @@ def get_selected_attributes(user_profile=None):
|
|
| 900 |
# 获取属性推荐
|
| 901 |
attribute_recommendations = result.get("attribute_recommendations", {})
|
| 902 |
|
| 903 |
-
# 获取属性列表
|
| 904 |
-
top_paths = selector.get_top_attributes(attribute_recommendations)
|
| 905 |
|
| 906 |
# 返回属性列表
|
| 907 |
ATTRIBUTE_SELECTION_CACHE = top_paths
|
|
@@ -922,22 +866,17 @@ def build_nested_dict(paths: List[str]) -> Dict:
|
|
| 922 |
current = current[part]
|
| 923 |
return result
|
| 924 |
|
| 925 |
-
def save_results(user_profile: Dict, selected_paths: List[str], output_dir: str =
|
| 926 |
"""
|
| 927 |
保存用户配置文件和选定的属性路径到文件
|
| 928 |
参数:
|
| 929 |
user_profile: 用户配置文件
|
| 930 |
selected_paths: 选定的属性路径 (列表形式)
|
| 931 |
-
output_dir: 输出目录(默认为
|
| 932 |
"""
|
| 933 |
try:
|
| 934 |
from pathlib import Path
|
| 935 |
import json
|
| 936 |
-
|
| 937 |
-
# 如果没有提供输出目录,使用默认的相对路径
|
| 938 |
-
if output_dir is None:
|
| 939 |
-
output_dir = os.path.join(os.path.dirname(os.path.dirname(__file__)), "output")
|
| 940 |
-
|
| 941 |
output_path = Path(output_dir)
|
| 942 |
output_path.mkdir(parents=True, exist_ok=True)
|
| 943 |
|
|
|
|
| 55 |
logger = logging.getLogger(__name__)
|
| 56 |
|
| 57 |
# 属性数据集路径
|
| 58 |
+
ATTRIBUTES_PATH = "/home/zhou/deeppersona/generate_user_profile_test/data/large_attributes.json" # 属性数据集路径
|
|
|
|
| 59 |
|
| 60 |
# 向量数据库路径
|
| 61 |
+
EMBEDDINGS_PATH = "/home/zhou/deeppersona/generate_user_profile_test/data/attribute_embeddings.pkl" # 属性嵌入向量路径
|
|
|
|
| 62 |
|
| 63 |
# 默认模型来自配置
|
| 64 |
DEFAULT_MODEL = GPT_MODEL
|
| 65 |
|
| 66 |
# 向量搜索参数
|
| 67 |
+
NEAR_NEIGHBOR_COUNT = 7 # 近邻数量
|
| 68 |
+
MID_NEIGHBOR_COUNT = 2 # 中距离邻居数量
|
| 69 |
FAR_NEIGHBOR_COUNT = 1 # 远距离邻居数量
|
| 70 |
DIVERSITY_THRESHOLD = 0.7 # 多样性阈值(余弦相似度)
|
| 71 |
|
|
|
|
| 93 |
# 设置用户配置文件
|
| 94 |
self.user_profile = user_profile
|
| 95 |
|
| 96 |
+
# 验证数据
|
| 97 |
+
self._validate_data()
|
| 98 |
|
| 99 |
+
# 加载向量数据库
|
| 100 |
self.embeddings_data = self._load_embeddings()
|
| 101 |
+
|
| 102 |
+
# 初始化属性路径和向量映射
|
| 103 |
+
self.path_to_embedding = {}
|
| 104 |
self.paths = []
|
| 105 |
self.embeddings = []
|
| 106 |
|
|
|
|
| 107 |
if self.embeddings_data:
|
| 108 |
+
self.paths = self.embeddings_data.get('paths', [])
|
| 109 |
+
self.embeddings = self.embeddings_data.get('embeddings', [])
|
|
|
|
| 110 |
|
| 111 |
+
# 创建路径到向量的映射
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 112 |
for i, path in enumerate(self.paths):
|
| 113 |
if i < len(self.embeddings):
|
| 114 |
self.path_to_embedding[path] = self.embeddings[i]
|
| 115 |
+
|
| 116 |
logger.info(f"已加载 {len(self.paths)} 条属性路径和对应的向量嵌入")
|
| 117 |
|
| 118 |
+
logger.info(f"已加载属性,包含 {len(self.attributes.keys())} 个顶级类别")
|
|
|
|
|
|
|
|
|
|
|
|
|
| 119 |
|
| 120 |
def _load_json(self, file_path: str) -> Dict:
|
| 121 |
"""从文件加载JSON数据"""
|
|
|
|
| 169 |
if "paths" not in self.attributes:
|
| 170 |
logger.info("正在将属性从嵌套字典格式转换为路径格式")
|
| 171 |
self.attributes = {"paths": self._flatten_attributes(self.attributes)}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 172 |
else:
|
| 173 |
raise ValueError("无效的属性格式:不是字典")
|
| 174 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 175 |
def _create_profile_embedding(self, profile: Dict) -> np.ndarray:
|
| 176 |
"""
|
| 177 |
为用户配置文件创建嵌入向量
|
|
|
|
| 356 |
if interests and isinstance(interests, list):
|
| 357 |
summary_parts.append(f"Interests: {', '.join(interests)}")
|
| 358 |
|
| 359 |
+
# Add personal story (life_story) - 现在包含这部分内容
|
| 360 |
+
if "personal_story" in profile and "personal_story" in profile["personal_story"]:
|
| 361 |
+
life_story = profile["personal_story"]["personal_story"]
|
| 362 |
+
if life_story:
|
| 363 |
+
summary_parts.append(f"Life Story: {life_story}")
|
| 364 |
+
|
| 365 |
+
# Add summary if available
|
| 366 |
if "summary" in profile:
|
| 367 |
summary_parts.append(f"Profile Summary: {profile['summary']}")
|
| 368 |
|
| 369 |
+
# 现在包含完整的based_data信息,包括life_story
|
| 370 |
+
|
| 371 |
return "\n".join(summary_parts)
|
| 372 |
|
| 373 |
+
def _flatten_attributes(self, attributes: Dict, prefix: str = "") -> List[str]:
|
| 374 |
+
"""
|
| 375 |
+
将属性字典扁平化为属性路径列表
|
| 376 |
+
|
| 377 |
+
参数:
|
| 378 |
+
attributes: 属性字典或子字典
|
| 379 |
+
prefix: 当前路径前缀
|
| 380 |
+
"""
|
| 381 |
+
result = []
|
| 382 |
+
|
| 383 |
+
def _flatten(attr_dict, curr_prefix):
|
| 384 |
+
for k, v in attr_dict.items():
|
| 385 |
+
path = f"{curr_prefix}.{k}" if curr_prefix else k
|
| 386 |
+
# 只有叶子节点(空字典)才添加到结果中
|
| 387 |
+
if isinstance(v, dict):
|
| 388 |
+
if not v: # 空字典,这是叶子节点
|
| 389 |
+
result.append(path)
|
| 390 |
+
else: # 非空字典,继续递归
|
| 391 |
+
_flatten(v, path)
|
| 392 |
+
else: # 非字典值,直接添加
|
| 393 |
+
result.append(path)
|
| 394 |
+
|
| 395 |
+
_flatten(attributes, prefix)
|
| 396 |
+
return result
|
| 397 |
+
|
| 398 |
+
def _get_attribute_categories(self) -> List[str]:
|
| 399 |
+
"""获取顶级属性类别"""
|
| 400 |
+
# 从路径中提取唯一的顶级类别
|
| 401 |
+
return sorted({path.split('.')[0] for path in self.attributes["paths"]})
|
| 402 |
+
|
| 403 |
def _format_attributes_tree(self, attributes_dict: Dict, prefix: str = "", depth: int = 0) -> List[str]:
|
| 404 |
"""
|
| 405 |
将属性字典格式化为文本格式的树结构
|
|
|
|
| 646 |
selected_paths = []
|
| 647 |
used_indices = set()
|
| 648 |
|
| 649 |
+
# 按5:3:2比例分配近邻、中距离、远距离邻居
|
| 650 |
+
total_ratio = 5 + 3 + 2 # 总比例 = 10
|
| 651 |
+
|
| 652 |
+
# 1. 选择近邻(相似度最高的属性)- 50% (5/10)
|
| 653 |
+
near_count = min(int(target_count * 5 / total_ratio), total_paths // 3)
|
| 654 |
near_indices = list(range(near_count))
|
| 655 |
+
for i in random.sample(near_indices, min(near_count, len(near_indices))):
|
| 656 |
if i not in used_indices:
|
| 657 |
selected_paths.append(path_similarities[i][0])
|
| 658 |
used_indices.add(i)
|
| 659 |
|
| 660 |
+
# 2. 选择中距离邻居 - 30% (3/10)
|
| 661 |
mid_start = total_paths // 3
|
| 662 |
mid_end = 2 * total_paths // 3
|
| 663 |
+
mid_count = min(int(target_count * 3 / total_ratio), (mid_end - mid_start))
|
| 664 |
mid_indices = list(range(mid_start, mid_end))
|
| 665 |
+
if mid_indices:
|
| 666 |
+
for i in random.sample(mid_indices, min(mid_count, len(mid_indices))):
|
| 667 |
+
if i not in used_indices:
|
| 668 |
+
selected_paths.append(path_similarities[i][0])
|
| 669 |
+
used_indices.add(i)
|
| 670 |
|
| 671 |
+
# 3. 选择远距离邻居(相似度最低的属性)- 20% (2/10)
|
| 672 |
far_start = 2 * total_paths // 3
|
| 673 |
+
far_count = min(int(target_count * 2 / total_ratio), (total_paths - far_start))
|
| 674 |
far_indices = list(range(far_start, total_paths))
|
| 675 |
+
if far_indices:
|
| 676 |
+
for i in random.sample(far_indices, min(far_count, len(far_indices))):
|
| 677 |
+
if i not in used_indices:
|
| 678 |
+
selected_paths.append(path_similarities[i][0])
|
| 679 |
+
used_indices.add(i)
|
| 680 |
|
| 681 |
# 如果还需要更多属性来达到目标数量,从未使用的索引中随机选择
|
| 682 |
remaining_count = target_count - len(selected_paths)
|
|
|
|
| 690 |
logger.info(f"使用向量搜索选择了 {len(selected_paths)} 条属性(近邻: {near_count}, 中距离: {mid_count}, 远距离: {far_count})")
|
| 691 |
return selected_paths
|
| 692 |
|
| 693 |
+
def get_top_attributes(self, result: Dict, target_count: int = 200) -> List[str]:
|
| 694 |
"""
|
| 695 |
获取属性列表
|
| 696 |
|
| 697 |
参数:
|
| 698 |
result: 来自analyze_profile_for_attributes的结果
|
| 699 |
+
target_count: 目标属性数量
|
| 700 |
|
| 701 |
返回:
|
| 702 |
属性路径列表
|
|
|
|
| 730 |
all_paths.extend(paths)
|
| 731 |
category_paths[category] = paths
|
| 732 |
|
| 733 |
+
# 使用传入的target_count参数,不再随机选择
|
|
|
|
|
|
|
| 734 |
|
| 735 |
# 如果有向量数据库,使用向量搜索
|
| 736 |
if self.embeddings_data and self.user_profile:
|
|
|
|
| 743 |
for category, paths in category_paths.items():
|
| 744 |
# 根据类别大小按比例分配目标数量
|
| 745 |
category_ratio = len(paths) / len(all_paths)
|
| 746 |
+
category_target = max(3, int(target_count * category_ratio))
|
| 747 |
|
| 748 |
# 使用向量搜索选择该类别的属性
|
| 749 |
category_selected = self._find_interesting_neighbors(
|
|
|
|
| 758 |
logger.info(f"使用向量搜索从 {len(all_paths)} 条属性中选择了 {len(final_paths)} 条属性")
|
| 759 |
return final_paths
|
| 760 |
|
| 761 |
+
# 如果没有向量数据库或向量搜索失败,直接返回空列表
|
| 762 |
+
logger.warning(f"没有可用的向量数据库或向量搜索失败,返回空列表")
|
| 763 |
+
return []
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 764 |
|
| 765 |
except Exception as e:
|
| 766 |
logger.error(f"Error generating attribute list: {e}")
|
|
|
|
| 824 |
|
| 825 |
return user_profile
|
| 826 |
|
| 827 |
+
def get_selected_attributes(user_profile=None, attribute_count=200):
|
| 828 |
global ATTRIBUTE_SELECTION_CACHE
|
| 829 |
+
# 注释掉缓存机制,确保每次都重新选择属性
|
| 830 |
+
# if ATTRIBUTE_SELECTION_CACHE is not None:
|
| 831 |
+
# return ATTRIBUTE_SELECTION_CACHE
|
| 832 |
|
| 833 |
try:
|
| 834 |
# 如果没有提供用户配置文件,生成一个
|
|
|
|
| 844 |
# 获取属性推荐
|
| 845 |
attribute_recommendations = result.get("attribute_recommendations", {})
|
| 846 |
|
| 847 |
+
# 获取属性列表,使用传入的attribute_count参数
|
| 848 |
+
top_paths = selector.get_top_attributes(attribute_recommendations, target_count=attribute_count)
|
| 849 |
|
| 850 |
# 返回属性列表
|
| 851 |
ATTRIBUTE_SELECTION_CACHE = top_paths
|
|
|
|
| 866 |
current = current[part]
|
| 867 |
return result
|
| 868 |
|
| 869 |
+
def save_results(user_profile: Dict, selected_paths: List[str], output_dir: str = '/home/zhou/persona/generate_user_profile/output') -> None:
|
| 870 |
"""
|
| 871 |
保存用户配置文件和选定的属性路径到文件
|
| 872 |
参数:
|
| 873 |
user_profile: 用户配置文件
|
| 874 |
selected_paths: 选定的属性路径 (列表形式)
|
| 875 |
+
output_dir: 输出目录(默认为 '/home/zhou/persona/generate_user_profile/output')
|
| 876 |
"""
|
| 877 |
try:
|
| 878 |
from pathlib import Path
|
| 879 |
import json
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 880 |
output_path = Path(output_dir)
|
| 881 |
output_path.mkdir(parents=True, exist_ok=True)
|
| 882 |
|
{generation_user_profile → generate_user_profile_final}/code/web_api_bridge.py
RENAMED
|
@@ -3,14 +3,13 @@
|
|
| 3 |
|
| 4 |
"""
|
| 5 |
Web API bridge script for handling inputs from the web interface
|
| 6 |
-
and generating user personas
|
| 7 |
"""
|
| 8 |
|
| 9 |
import json
|
| 10 |
import argparse
|
| 11 |
import sys
|
| 12 |
import os
|
| 13 |
-
import random
|
| 14 |
from typing import Dict, Any, List, Optional
|
| 15 |
|
| 16 |
# Import required modules
|
|
@@ -25,8 +24,8 @@ from based_data import (
|
|
| 25 |
generate_interests_and_hobbies
|
| 26 |
)
|
| 27 |
|
| 28 |
-
from generate_profile import
|
| 29 |
-
|
| 30 |
|
| 31 |
def parse_input_data(input_file: str) -> Dict[str, Any]:
|
| 32 |
"""
|
|
@@ -46,12 +45,14 @@ def parse_input_data(input_file: str) -> Dict[str, Any]:
|
|
| 46 |
print(f"Error parsing input file: {e}")
|
| 47 |
return {}
|
| 48 |
|
| 49 |
-
|
|
|
|
| 50 |
"""
|
| 51 |
-
Generate a complete user persona from input data
|
| 52 |
|
| 53 |
Args:
|
| 54 |
input_data: Input data containing basic information and optional custom values
|
|
|
|
| 55 |
|
| 56 |
Returns:
|
| 57 |
Dict: Generated complete user persona
|
|
@@ -112,44 +113,60 @@ def generate_profile_from_input(input_data: Dict[str, Any]) -> Dict[str, Any]:
|
|
| 112 |
print("Generating interests and hobbies...")
|
| 113 |
interests_and_hobbies = generate_interests_and_hobbies(personal_story)
|
| 114 |
|
| 115 |
-
# Build
|
| 116 |
-
|
| 117 |
-
|
| 118 |
-
|
| 119 |
-
|
| 120 |
-
|
| 121 |
-
|
|
|
|
|
|
|
| 122 |
},
|
| 123 |
-
"
|
| 124 |
-
"
|
| 125 |
-
|
| 126 |
-
|
|
|
|
| 127 |
}
|
| 128 |
|
| 129 |
-
#
|
| 130 |
-
|
| 131 |
-
|
| 132 |
-
|
| 133 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 134 |
|
| 135 |
-
|
| 136 |
-
print("Saving selected attributes...")
|
| 137 |
-
save_results(profile, selected_paths)
|
| 138 |
|
| 139 |
-
#
|
| 140 |
-
|
| 141 |
-
|
| 142 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 143 |
|
| 144 |
return profile
|
|
|
|
| 145 |
except Exception as e:
|
| 146 |
print(f"Error generating user persona: {e}")
|
|
|
|
|
|
|
| 147 |
return {}
|
| 148 |
|
|
|
|
| 149 |
def main():
|
| 150 |
"""Main function to process command line arguments and execute generation workflow"""
|
| 151 |
parser = argparse.ArgumentParser(description="Generate user persona from input data")
|
| 152 |
parser.add_argument('--input', type=str, required=True, help="Path to input JSON file")
|
|
|
|
| 153 |
args = parser.parse_args()
|
| 154 |
|
| 155 |
# Parse input data
|
|
@@ -159,7 +176,7 @@ def main():
|
|
| 159 |
sys.exit(1)
|
| 160 |
|
| 161 |
# Generate user persona
|
| 162 |
-
profile = generate_profile_from_input(input_data)
|
| 163 |
if not profile:
|
| 164 |
print("Failed to generate user persona, exiting")
|
| 165 |
sys.exit(1)
|
|
@@ -190,5 +207,6 @@ def main():
|
|
| 190 |
# Output the full profile as JSON
|
| 191 |
print(json.dumps(profile, ensure_ascii=False))
|
| 192 |
|
|
|
|
| 193 |
if __name__ == "__main__":
|
| 194 |
main()
|
|
|
|
| 3 |
|
| 4 |
"""
|
| 5 |
Web API bridge script for handling inputs from the web interface
|
| 6 |
+
and generating user personas using the improved methods from generate_profile_ind.py.
|
| 7 |
"""
|
| 8 |
|
| 9 |
import json
|
| 10 |
import argparse
|
| 11 |
import sys
|
| 12 |
import os
|
|
|
|
| 13 |
from typing import Dict, Any, List, Optional
|
| 14 |
|
| 15 |
# Import required modules
|
|
|
|
| 24 |
generate_interests_and_hobbies
|
| 25 |
)
|
| 26 |
|
| 27 |
+
from generate_profile import generate_single_profile
|
| 28 |
+
|
| 29 |
|
| 30 |
def parse_input_data(input_file: str) -> Dict[str, Any]:
|
| 31 |
"""
|
|
|
|
| 45 |
print(f"Error parsing input file: {e}")
|
| 46 |
return {}
|
| 47 |
|
| 48 |
+
|
| 49 |
+
def generate_profile_from_input(input_data: Dict[str, Any], attribute_count: int = 200) -> Dict[str, Any]:
|
| 50 |
"""
|
| 51 |
+
Generate a complete user persona from input data using the improved generation method
|
| 52 |
|
| 53 |
Args:
|
| 54 |
input_data: Input data containing basic information and optional custom values
|
| 55 |
+
attribute_count: Number of attributes to generate (default: 200)
|
| 56 |
|
| 57 |
Returns:
|
| 58 |
Dict: Generated complete user persona
|
|
|
|
| 113 |
print("Generating interests and hobbies...")
|
| 114 |
interests_and_hobbies = generate_interests_and_hobbies(personal_story)
|
| 115 |
|
| 116 |
+
# Build base profile structure that will be saved to user_profile.json
|
| 117 |
+
# This needs to be saved before calling generate_single_profile
|
| 118 |
+
base_profile = {
|
| 119 |
+
"age": age,
|
| 120 |
+
"gender": gender,
|
| 121 |
+
"Occupations": [occupation],
|
| 122 |
+
"location": location_info,
|
| 123 |
+
"personal_values": {
|
| 124 |
+
"values_orientation": values_orientation
|
| 125 |
},
|
| 126 |
+
"life_attitude": life_attitude.get("outlook") if isinstance(life_attitude, dict) else str(life_attitude),
|
| 127 |
+
"personal_story": {
|
| 128 |
+
"personal_story": personal_story
|
| 129 |
+
},
|
| 130 |
+
"interests": interests_and_hobbies
|
| 131 |
}
|
| 132 |
|
| 133 |
+
# Save the base profile to user_profile.json
|
| 134 |
+
# This is required by generate_single_profile
|
| 135 |
+
project_root = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
|
| 136 |
+
output_dir = os.path.join(project_root, "output")
|
| 137 |
+
os.makedirs(output_dir, exist_ok=True)
|
| 138 |
+
|
| 139 |
+
user_profile_path = os.path.join(output_dir, 'user_profile.json')
|
| 140 |
+
with open(user_profile_path, 'w', encoding='utf-8') as f:
|
| 141 |
+
json.dump(base_profile, f, ensure_ascii=False, indent=2)
|
| 142 |
|
| 143 |
+
print(f"Base profile saved to: {user_profile_path}")
|
|
|
|
|
|
|
| 144 |
|
| 145 |
+
# Now call generate_single_profile which will:
|
| 146 |
+
# 1. Run select_attributes to choose attributes
|
| 147 |
+
# 2. Generate all sections using the improved prompts
|
| 148 |
+
# 3. Generate the final summary
|
| 149 |
+
print(f"Generating complete profile with {attribute_count} attributes...")
|
| 150 |
+
profile = generate_single_profile(template=None, profile_index=0, attribute_count=attribute_count)
|
| 151 |
+
|
| 152 |
+
if not profile:
|
| 153 |
+
print("Failed to generate profile")
|
| 154 |
+
return {}
|
| 155 |
|
| 156 |
return profile
|
| 157 |
+
|
| 158 |
except Exception as e:
|
| 159 |
print(f"Error generating user persona: {e}")
|
| 160 |
+
import traceback
|
| 161 |
+
traceback.print_exc()
|
| 162 |
return {}
|
| 163 |
|
| 164 |
+
|
| 165 |
def main():
|
| 166 |
"""Main function to process command line arguments and execute generation workflow"""
|
| 167 |
parser = argparse.ArgumentParser(description="Generate user persona from input data")
|
| 168 |
parser.add_argument('--input', type=str, required=True, help="Path to input JSON file")
|
| 169 |
+
parser.add_argument('--attributes', type=int, default=200, help="Number of attributes to generate (default: 200)")
|
| 170 |
args = parser.parse_args()
|
| 171 |
|
| 172 |
# Parse input data
|
|
|
|
| 176 |
sys.exit(1)
|
| 177 |
|
| 178 |
# Generate user persona
|
| 179 |
+
profile = generate_profile_from_input(input_data, attribute_count=args.attributes)
|
| 180 |
if not profile:
|
| 181 |
print("Failed to generate user persona, exiting")
|
| 182 |
sys.exit(1)
|
|
|
|
| 207 |
# Output the full profile as JSON
|
| 208 |
print(json.dumps(profile, ensure_ascii=False))
|
| 209 |
|
| 210 |
+
|
| 211 |
if __name__ == "__main__":
|
| 212 |
main()
|
{generation_user_profile → generate_user_profile_final}/data/occupations_english.json
RENAMED
|
File without changes
|
generation_user_profile/code/data/100.json
DELETED
|
@@ -1,395 +0,0 @@
|
|
| 1 |
-
{
|
| 2 |
-
"Career and Work Identity": {
|
| 3 |
-
"Business": {
|
| 4 |
-
"Strategies": {}
|
| 5 |
-
},
|
| 6 |
-
"Client": {
|
| 7 |
-
"UserPreferences": {},
|
| 8 |
-
"UserProfileAttributes": {}
|
| 9 |
-
},
|
| 10 |
-
"Company": {
|
| 11 |
-
"Industry": {},
|
| 12 |
-
"RevenueMetrics": {},
|
| 13 |
-
"Type": {}
|
| 14 |
-
},
|
| 15 |
-
"CompanyCulture": {
|
| 16 |
-
"Type": {}
|
| 17 |
-
},
|
| 18 |
-
"Experience": {
|
| 19 |
-
"Attributes": {},
|
| 20 |
-
"Salesforce": {}
|
| 21 |
-
},
|
| 22 |
-
"Goals": {
|
| 23 |
-
"FinancialAttributes": {},
|
| 24 |
-
"GoalsAndAspirations": {}
|
| 25 |
-
},
|
| 26 |
-
"Industry": {
|
| 27 |
-
"Expertise": {},
|
| 28 |
-
"TechProficiency": {}
|
| 29 |
-
},
|
| 30 |
-
"JobRole": {
|
| 31 |
-
"LocationPreferences": {},
|
| 32 |
-
"Responsibilities": {}
|
| 33 |
-
},
|
| 34 |
-
"Occupation": {
|
| 35 |
-
"Service": {}
|
| 36 |
-
},
|
| 37 |
-
"Organization": {
|
| 38 |
-
"Category": {},
|
| 39 |
-
"Guidelines": {},
|
| 40 |
-
"Preferences": {}
|
| 41 |
-
},
|
| 42 |
-
"PersonalGoals": {
|
| 43 |
-
"Goals": {},
|
| 44 |
-
"Meetings": {}
|
| 45 |
-
},
|
| 46 |
-
"PreviousExperience": {
|
| 47 |
-
"UserLevel": {}
|
| 48 |
-
},
|
| 49 |
-
"Profession": {
|
| 50 |
-
"PersonalBackgroundAttributes": {},
|
| 51 |
-
"ProfessionalAttributes": {},
|
| 52 |
-
"UserProfileAttributes": {}
|
| 53 |
-
},
|
| 54 |
-
"ProfessionalField": {
|
| 55 |
-
"Experience": {},
|
| 56 |
-
"Industry": {},
|
| 57 |
-
"Role": {}
|
| 58 |
-
},
|
| 59 |
-
"Role": {
|
| 60 |
-
"Background": {},
|
| 61 |
-
"CommunicationStyle": {},
|
| 62 |
-
"Contract": {},
|
| 63 |
-
"Industry": {},
|
| 64 |
-
"positionTitle": {}
|
| 65 |
-
},
|
| 66 |
-
"Skills": {
|
| 67 |
-
"TechnicalAttributes": {},
|
| 68 |
-
"UserProfileAttributes": {}
|
| 69 |
-
},
|
| 70 |
-
"Team": {
|
| 71 |
-
"dynamics": {}
|
| 72 |
-
},
|
| 73 |
-
"Technology": {
|
| 74 |
-
"Type": {}
|
| 75 |
-
},
|
| 76 |
-
"User": {
|
| 77 |
-
"BusinessContext": {},
|
| 78 |
-
"CampaignAttributes": {},
|
| 79 |
-
"UserAttributes": {}
|
| 80 |
-
},
|
| 81 |
-
"WorkEnvironment": {
|
| 82 |
-
"ContentOrganization": {},
|
| 83 |
-
"UserPreferences": {}
|
| 84 |
-
}
|
| 85 |
-
},
|
| 86 |
-
"Core Values, Beliefs, and Philosophy": {
|
| 87 |
-
"Personal": {
|
| 88 |
-
"ForgivenessLevel": {},
|
| 89 |
-
"PersonalAttributes": {}
|
| 90 |
-
},
|
| 91 |
-
"Philosophical Beliefs": {
|
| 92 |
-
"AnimalConsumption": {}
|
| 93 |
-
},
|
| 94 |
-
"PoliticalIdeology": {
|
| 95 |
-
"Views": {}
|
| 96 |
-
},
|
| 97 |
-
"Spirituality": {
|
| 98 |
-
"Personal Development": {}
|
| 99 |
-
},
|
| 100 |
-
"Sustainability": {
|
| 101 |
-
"Attachment": {}
|
| 102 |
-
}
|
| 103 |
-
},
|
| 104 |
-
"Cultural and Social Context": {
|
| 105 |
-
"Attitudes": {
|
| 106 |
-
"TowardsDrugs": {}
|
| 107 |
-
},
|
| 108 |
-
"Audience": {
|
| 109 |
-
"InvestorType": {}
|
| 110 |
-
},
|
| 111 |
-
"Communication": {
|
| 112 |
-
"Style": {}
|
| 113 |
-
},
|
| 114 |
-
"Community": {
|
| 115 |
-
"UserCharacteristics": {}
|
| 116 |
-
},
|
| 117 |
-
"CompanyCulture": {
|
| 118 |
-
"Culture": {}
|
| 119 |
-
},
|
| 120 |
-
"Culture": {
|
| 121 |
-
"PersonalAttributes": {},
|
| 122 |
-
"PersonalInterests": {}
|
| 123 |
-
},
|
| 124 |
-
"DataProcessing": {
|
| 125 |
-
"Nature": {}
|
| 126 |
-
},
|
| 127 |
-
"Exposure": {
|
| 128 |
-
"HistoricalTopics": {}
|
| 129 |
-
},
|
| 130 |
-
"Family": {
|
| 131 |
-
"size": {}
|
| 132 |
-
},
|
| 133 |
-
"Historical": {
|
| 134 |
-
"Background": {}
|
| 135 |
-
},
|
| 136 |
-
"Knowledge": {
|
| 137 |
-
"AboutRefugeeIssues": {}
|
| 138 |
-
},
|
| 139 |
-
"Leadership": {
|
| 140 |
-
"Style": {}
|
| 141 |
-
},
|
| 142 |
-
"LocalEvents": {
|
| 143 |
-
"Attendance": {}
|
| 144 |
-
},
|
| 145 |
-
"LocalLaws": {
|
| 146 |
-
"RhodeIsland": {}
|
| 147 |
-
},
|
| 148 |
-
"Political": {
|
| 149 |
-
"Views": {}
|
| 150 |
-
},
|
| 151 |
-
"Preferences": {
|
| 152 |
-
"ChildrenPreferences": {},
|
| 153 |
-
"PersonalPreferences": {}
|
| 154 |
-
},
|
| 155 |
-
"Priorities": {
|
| 156 |
-
"TravelGoals": {}
|
| 157 |
-
},
|
| 158 |
-
"Region": {
|
| 159 |
-
"Residence": {}
|
| 160 |
-
},
|
| 161 |
-
"School": {
|
| 162 |
-
"Environment": {}
|
| 163 |
-
},
|
| 164 |
-
"SocialActivities": {
|
| 165 |
-
"NightlifeExperience": {}
|
| 166 |
-
},
|
| 167 |
-
"SocialStigma": {
|
| 168 |
-
"Menstruation": {}
|
| 169 |
-
},
|
| 170 |
-
"SubstanceUse": {
|
| 171 |
-
"DrugAwareness": {}
|
| 172 |
-
},
|
| 173 |
-
"SupportSystems": {
|
| 174 |
-
"Availability": {}
|
| 175 |
-
}
|
| 176 |
-
},
|
| 177 |
-
"Demographic Information": {
|
| 178 |
-
"Demographics": {
|
| 179 |
-
"Age": {},
|
| 180 |
-
"CurrentLocation": {},
|
| 181 |
-
"Education": {},
|
| 182 |
-
"General": {},
|
| 183 |
-
"Identity": {},
|
| 184 |
-
"Origin": {},
|
| 185 |
-
"Region": {},
|
| 186 |
-
"TargetAudience": {}
|
| 187 |
-
},
|
| 188 |
-
"Family": {
|
| 189 |
-
"FamilyDynamics": {},
|
| 190 |
-
"PersonalAttributes": {},
|
| 191 |
-
"PersonalDemographics": {}
|
| 192 |
-
},
|
| 193 |
-
"Lifestyle": {
|
| 194 |
-
"budget": {}
|
| 195 |
-
},
|
| 196 |
-
"Professional": {
|
| 197 |
-
"Demographic": {},
|
| 198 |
-
"Professional Background": {}
|
| 199 |
-
},
|
| 200 |
-
"Socioeconomic": {
|
| 201 |
-
"UserProfile": {}
|
| 202 |
-
}
|
| 203 |
-
},
|
| 204 |
-
"Education and Learning": {
|
| 205 |
-
"AcademicProfile": {
|
| 206 |
-
"EducationLevel": {},
|
| 207 |
-
"EducationalBackground": {}
|
| 208 |
-
},
|
| 209 |
-
"EducationalInstitution": {
|
| 210 |
-
"Name": {}
|
| 211 |
-
},
|
| 212 |
-
"KnowledgeFamiliarity": {
|
| 213 |
-
"DifficultyLevel": {},
|
| 214 |
-
"MedicalTerminology": {}
|
| 215 |
-
},
|
| 216 |
-
"LearningPlatform": {
|
| 217 |
-
"Focus": {}
|
| 218 |
-
},
|
| 219 |
-
"PersonalAttributes": {
|
| 220 |
-
"FitnessPreferences": {},
|
| 221 |
-
"UserPreferences": {}
|
| 222 |
-
},
|
| 223 |
-
"PersonalExperience": {
|
| 224 |
-
"WorkingWithRefugees": {}
|
| 225 |
-
},
|
| 226 |
-
"SubjectExpertise": {
|
| 227 |
-
"FocusArea": {}
|
| 228 |
-
},
|
| 229 |
-
"SubjectInterest": {
|
| 230 |
-
"User_Personalization": {}
|
| 231 |
-
},
|
| 232 |
-
"UnderstandingLevel": {
|
| 233 |
-
"Achievement": {},
|
| 234 |
-
"Creative_Education": {},
|
| 235 |
-
"Science_Education": {},
|
| 236 |
-
"Status": {}
|
| 237 |
-
}
|
| 238 |
-
},
|
| 239 |
-
"Emotional and Relational Skills": {
|
| 240 |
-
"Emotional Attributes": {
|
| 241 |
-
"EmotionalSupportNeeds": {}
|
| 242 |
-
},
|
| 243 |
-
"Environmental Attributes": {
|
| 244 |
-
"emotionalConnection": {}
|
| 245 |
-
},
|
| 246 |
-
"Personal Attributes": {
|
| 247 |
-
"Beliefs": {},
|
| 248 |
-
"Preferences": {}
|
| 249 |
-
},
|
| 250 |
-
"Work Attributes": {
|
| 251 |
-
"Drivers": {}
|
| 252 |
-
}
|
| 253 |
-
},
|
| 254 |
-
"Hobbies, Interests, and Lifestyle": {
|
| 255 |
-
"Education": {
|
| 256 |
-
"Interests": {}
|
| 257 |
-
},
|
| 258 |
-
"FoodPreferences": {
|
| 259 |
-
"Dietary Preference": {},
|
| 260 |
-
"Food Preference": {}
|
| 261 |
-
},
|
| 262 |
-
"Hobbies": {
|
| 263 |
-
"design": {},
|
| 264 |
-
"types": {}
|
| 265 |
-
},
|
| 266 |
-
"Interests": {
|
| 267 |
-
"ConsumerPreferences": {},
|
| 268 |
-
"CulturalInterest": {},
|
| 269 |
-
"UserPreferences": {}
|
| 270 |
-
},
|
| 271 |
-
"LifestylePreferences": {
|
| 272 |
-
"UserAttributes": {}
|
| 273 |
-
},
|
| 274 |
-
"Professional": {
|
| 275 |
-
"Interests": {}
|
| 276 |
-
},
|
| 277 |
-
"WorkRelatedInterests": {
|
| 278 |
-
"FinancialManagement": {},
|
| 279 |
-
"InvestmentPreferences": {}
|
| 280 |
-
},
|
| 281 |
-
"contentType": {
|
| 282 |
-
"AdCampaigns": {}
|
| 283 |
-
}
|
| 284 |
-
},
|
| 285 |
-
"Lifestyle and Daily Routine": {
|
| 286 |
-
"Dietary Preferences": {
|
| 287 |
-
"DailyContext": {},
|
| 288 |
-
"FamilyContext": {},
|
| 289 |
-
"HealthConsiderations": {},
|
| 290 |
-
"Preferences": {}
|
| 291 |
-
},
|
| 292 |
-
"Living Conditions": {
|
| 293 |
-
"BuyingIntention": {}
|
| 294 |
-
},
|
| 295 |
-
"Personal Lifestyle": {
|
| 296 |
-
"Preferences": {}
|
| 297 |
-
}
|
| 298 |
-
},
|
| 299 |
-
"Media Consumption and Engagement": {
|
| 300 |
-
"PersonalizationAttributes": {
|
| 301 |
-
"UserPreferences": {}
|
| 302 |
-
}
|
| 303 |
-
},
|
| 304 |
-
"Physical and Health Characteristics": {
|
| 305 |
-
"EnvironmentalFactors": {
|
| 306 |
-
"SoilType": {}
|
| 307 |
-
},
|
| 308 |
-
"GeneticHistory": {
|
| 309 |
-
"GeneticDisorders": {}
|
| 310 |
-
},
|
| 311 |
-
"HealthObjectives": {
|
| 312 |
-
"CardiovascularWellness": {}
|
| 313 |
-
},
|
| 314 |
-
"MedicalHistory": {
|
| 315 |
-
"General": {}
|
| 316 |
-
},
|
| 317 |
-
"PersonalHealthAttributes": {
|
| 318 |
-
"DietaryPreferences": {},
|
| 319 |
-
"General": {},
|
| 320 |
-
"HealthConditions": {}
|
| 321 |
-
}
|
| 322 |
-
},
|
| 323 |
-
"Psychological and Cognitive Aspects": {
|
| 324 |
-
"BehavioralAttributes": {
|
| 325 |
-
"AlcoholConsumptionHistory": {}
|
| 326 |
-
},
|
| 327 |
-
"CognitiveAttributes": {
|
| 328 |
-
"CognitiveAttributes": {},
|
| 329 |
-
"DevelopmentalAttributes": {},
|
| 330 |
-
"EmotionalAttributes": {},
|
| 331 |
-
"PreferenceAttributes": {}
|
| 332 |
-
},
|
| 333 |
-
"CopingMechanisms": {
|
| 334 |
-
"PersonalHistory": {}
|
| 335 |
-
},
|
| 336 |
-
"EmotionalAttributes": {
|
| 337 |
-
"PersonalAttributes": {},
|
| 338 |
-
"PsychologicalFactors": {}
|
| 339 |
-
},
|
| 340 |
-
"MentalAttributes": {
|
| 341 |
-
"CognitiveAttributes": {},
|
| 342 |
-
"UserPreferences": {}
|
| 343 |
-
},
|
| 344 |
-
"Past": {
|
| 345 |
-
"IndividualCharacteristics": {}
|
| 346 |
-
},
|
| 347 |
-
"PersonalityAttributes": {
|
| 348 |
-
"Style": {}
|
| 349 |
-
},
|
| 350 |
-
"User": {
|
| 351 |
-
"EmotionalState": {}
|
| 352 |
-
}
|
| 353 |
-
},
|
| 354 |
-
"Relationships and Social Networks": {
|
| 355 |
-
"CustomerRelations": {
|
| 356 |
-
"UserEngagement": {},
|
| 357 |
-
"UserProfile": {}
|
| 358 |
-
},
|
| 359 |
-
"FamilyRelations": {
|
| 360 |
-
"CurrentLocation": {},
|
| 361 |
-
"CurrentState": {},
|
| 362 |
-
"FamilyDynamics": {},
|
| 363 |
-
"FamilyMaritalStatus": {},
|
| 364 |
-
"RelationshipDetails": {}
|
| 365 |
-
},
|
| 366 |
-
"PersonalPreferences": {
|
| 367 |
-
"Companions": {}
|
| 368 |
-
},
|
| 369 |
-
"PersonalRelationships": {
|
| 370 |
-
"Availability": {},
|
| 371 |
-
"Context": {},
|
| 372 |
-
"SocialConnections": {},
|
| 373 |
-
"SocialInfluence": {},
|
| 374 |
-
"UniversityAffiliation": {}
|
| 375 |
-
},
|
| 376 |
-
"ProfessionalRelations": {
|
| 377 |
-
"PersonalAttributes": {}
|
| 378 |
-
},
|
| 379 |
-
"ProfessionalRelationships": {
|
| 380 |
-
"Colleagues": {},
|
| 381 |
-
"Connections": {},
|
| 382 |
-
"Duration": {},
|
| 383 |
-
"HeadOfSalesRelationship": {},
|
| 384 |
-
"Interests": {},
|
| 385 |
-
"Preferences": {},
|
| 386 |
-
"Relationship": {},
|
| 387 |
-
"RelationshipQuality": {},
|
| 388 |
-
"Role": {},
|
| 389 |
-
"ZichengExperience": {}
|
| 390 |
-
},
|
| 391 |
-
"UserAttributes": {
|
| 392 |
-
"FatherRelationship": {}
|
| 393 |
-
}
|
| 394 |
-
}
|
| 395 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
generation_user_profile/code/data/attribute_embeddings.pkl
DELETED
|
@@ -1,3 +0,0 @@
|
|
| 1 |
-
version https://git-lfs.github.com/spec/v1
|
| 2 |
-
oid sha256:664f3d1f49a5a3162108da60e4340411f01fdf58a38419387ddb1cdd0ee61481
|
| 3 |
-
size 28364886
|
|
|
|
|
|
|
|
|
|
|
|
generation_user_profile/code/data/attributes_merged.json
DELETED
|
The diff for this file is too large to render.
See raw diff
|
|
|
generation_user_profile/code/data/large_attributes copy.json
DELETED
|
The diff for this file is too large to render.
See raw diff
|
|
|
generation_user_profile/code/data/large_attributes.json
DELETED
|
@@ -1,67 +0,0 @@
|
|
| 1 |
-
{
|
| 2 |
-
"Demographic Information": {
|
| 3 |
-
"Age": {
|
| 4 |
-
"description": "The person's age in years"
|
| 5 |
-
},
|
| 6 |
-
"Gender": {
|
| 7 |
-
"description": "The person's gender identity"
|
| 8 |
-
},
|
| 9 |
-
"Location": {
|
| 10 |
-
"description": "Where the person lives",
|
| 11 |
-
"Country": {
|
| 12 |
-
"description": "The country where the person lives"
|
| 13 |
-
},
|
| 14 |
-
"City": {
|
| 15 |
-
"description": "The city where the person lives"
|
| 16 |
-
}
|
| 17 |
-
}
|
| 18 |
-
},
|
| 19 |
-
"Career and Work Identity": {
|
| 20 |
-
"Occupation": {
|
| 21 |
-
"description": "The person's current job or profession"
|
| 22 |
-
},
|
| 23 |
-
"Work Experience": {
|
| 24 |
-
"description": "The person's work history and experience"
|
| 25 |
-
}
|
| 26 |
-
},
|
| 27 |
-
"Core Values, Beliefs, and Philosophy": {
|
| 28 |
-
"Personal Values": {
|
| 29 |
-
"description": "The person's core values and beliefs"
|
| 30 |
-
},
|
| 31 |
-
"Life Philosophy": {
|
| 32 |
-
"description": "The person's approach to life and worldview"
|
| 33 |
-
}
|
| 34 |
-
},
|
| 35 |
-
"Lifestyle and Daily Routine": {
|
| 36 |
-
"Daily Habits": {
|
| 37 |
-
"description": "Regular activities the person engages in"
|
| 38 |
-
},
|
| 39 |
-
"Lifestyle Choices": {
|
| 40 |
-
"description": "How the person chooses to live their life"
|
| 41 |
-
}
|
| 42 |
-
},
|
| 43 |
-
"Cultural and Social Context": {
|
| 44 |
-
"Cultural Background": {
|
| 45 |
-
"description": "The person's cultural heritage and influences"
|
| 46 |
-
},
|
| 47 |
-
"Social Connections": {
|
| 48 |
-
"description": "The person's relationships and social network"
|
| 49 |
-
}
|
| 50 |
-
},
|
| 51 |
-
"Hobbies, Interests, and Lifestyle": {
|
| 52 |
-
"Hobbies": {
|
| 53 |
-
"description": "Activities the person enjoys in their free time"
|
| 54 |
-
},
|
| 55 |
-
"Interests": {
|
| 56 |
-
"description": "Topics or subjects the person is interested in"
|
| 57 |
-
}
|
| 58 |
-
},
|
| 59 |
-
"Other Attributes": {
|
| 60 |
-
"Personal Story": {
|
| 61 |
-
"description": "Significant events or narratives from the person's life"
|
| 62 |
-
},
|
| 63 |
-
"Key Life Events": {
|
| 64 |
-
"description": "Major events that have shaped the person's life"
|
| 65 |
-
}
|
| 66 |
-
}
|
| 67 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
generation_user_profile/code/data/occupations_english copy.json
DELETED
|
@@ -1,933 +0,0 @@
|
|
| 1 |
-
[
|
| 2 |
-
"HR Specialist/Assistant ",
|
| 3 |
-
"HR Information System (HRIS) Management ",
|
| 4 |
-
"HR Director ",
|
| 5 |
-
"HR Manager/Supervisor ",
|
| 6 |
-
"Other HR Administration ",
|
| 7 |
-
"Human Resources Director ",
|
| 8 |
-
"Party, Labor Union, and Youth League Officer ",
|
| 9 |
-
"Internal Staff ",
|
| 10 |
-
"Front Desk/Switchboard/Receptionist ",
|
| 11 |
-
"Logistics ",
|
| 12 |
-
"Librarian ",
|
| 13 |
-
"Training Specialist/Assistant ",
|
| 14 |
-
"Training Manager/Supervisor ",
|
| 15 |
-
"Recruitment Specialist/Assistant ",
|
| 16 |
-
"Recruitment Manager/Supervisor ",
|
| 17 |
-
"Clerk ",
|
| 18 |
-
"Document/Data Management ",
|
| 19 |
-
"Headhunter Consultant ",
|
| 20 |
-
"Computer Operator/Typist/Data Entry Clerk ",
|
| 21 |
-
"Manager Assistant/Secretary ",
|
| 22 |
-
"Compensation/Performance/Employee Relations ",
|
| 23 |
-
"Administrative Specialist/Assistant ",
|
| 24 |
-
"Administrative Director ",
|
| 25 |
-
"Administrative Manager/Supervisor ",
|
| 26 |
-
"Other Health and Massage ",
|
| 27 |
-
"Masseur/Masseuse ",
|
| 28 |
-
"Bath Attendant ",
|
| 29 |
-
"Foot Reflexologist ",
|
| 30 |
-
"Acupuncture and Tui Na ",
|
| 31 |
-
"Insurance Product Development ",
|
| 32 |
-
"Other Insurance Positions ",
|
| 33 |
-
"Insurance Internal Staff ",
|
| 34 |
-
"Insurance Trainer ",
|
| 35 |
-
"Insurance Contract Management ",
|
| 36 |
-
"Insurance Client Manager ",
|
| 37 |
-
"Insurance Customer Service ",
|
| 38 |
-
"Insurance Underwriting/Claims ",
|
| 39 |
-
"Insurance Telemarketing ",
|
| 40 |
-
"Insurance Actuary ",
|
| 41 |
-
"Insurance Broker ",
|
| 42 |
-
"Insurance Project Manager ",
|
| 43 |
-
"Insurance Consultant ",
|
| 44 |
-
"Reserve Manager ",
|
| 45 |
-
"Automobile Damage Assessment/Auto Insurance Claims ",
|
| 46 |
-
"Renewal Management ",
|
| 47 |
-
"Auto Insurance Specialist ",
|
| 48 |
-
"Other Positions ",
|
| 49 |
-
"Breeding Staff ",
|
| 50 |
-
"Breeding Department Supervisor ",
|
| 51 |
-
"Other Agriculture, Forestry, Animal Husbandry, and Fishery",
|
| 52 |
-
"Agronomist/Floral Designer ",
|
| 53 |
-
"Animal Breeding/Farming ",
|
| 54 |
-
"Animal Nutrition/Feed Research and Development ",
|
| 55 |
-
"Farm Manager ",
|
| 56 |
-
"Forestry Technician ",
|
| 57 |
-
"Livestock Specialist ",
|
| 58 |
-
"Feed Business ",
|
| 59 |
-
"Feed Sales ",
|
| 60 |
-
"Clinical Promotion Manager ",
|
| 61 |
-
"Clinical Data Analyst ",
|
| 62 |
-
"Clinical Research/Coordination ",
|
| 63 |
-
"Other in Pharmaceutical Biology ",
|
| 64 |
-
"Chemical Analysis Tester ",
|
| 65 |
-
"Medical Device Promotion ",
|
| 66 |
-
"Medical Device Registration ",
|
| 67 |
-
"Medical Device Production/Quality Management ",
|
| 68 |
-
"Medical Device Research and Development ",
|
| 69 |
-
"Medical Device Research and Development/Maintenance ",
|
| 70 |
-
"Pharmaceutical Chemical Analysis ",
|
| 71 |
-
"Pharmaceutical Academic Promotion ",
|
| 72 |
-
"Pharmaceutical Technology Research and Development Personnel ",
|
| 73 |
-
"Pharmaceutical Technology Research and Development Management Personnel ",
|
| 74 |
-
"Pharmaceutical Investment Promotion ",
|
| 75 |
-
"Pharmaceutical Research and Development/Production/Registration ",
|
| 76 |
-
"Pharmaceutical Sales Manager/Supervisor ",
|
| 77 |
-
"Pharmaceutical Project Bidding Management ",
|
| 78 |
-
"Pharmaceutical Project Management ",
|
| 79 |
-
"Bioengineering/Biopharmaceuticals ",
|
| 80 |
-
"Pharmaceutical Marketing Specialist/Assistant ",
|
| 81 |
-
"Pharmaceutical Marketing Manager/Supervisor ",
|
| 82 |
-
"Traditional Chinese Medicine Doctor ",
|
| 83 |
-
"Obstetrician ",
|
| 84 |
-
"Health Doctor ",
|
| 85 |
-
"Public Health/Disease Control ",
|
| 86 |
-
"Laboratory/Testing Physician ",
|
| 87 |
-
"Medical Laboratory/Testing ",
|
| 88 |
-
"Medical Imaging/Radiology Physician ",
|
| 89 |
-
"Doctor ",
|
| 90 |
-
"Medical Management ",
|
| 91 |
-
"Pharmaceutical Quality Inspection ",
|
| 92 |
-
"Other in Hospital Nursing ",
|
| 93 |
-
"Pet Care/Veterinarian ",
|
| 94 |
-
"Medical Guide ",
|
| 95 |
-
"Psychologist ",
|
| 96 |
-
"Nurse/Nursing ",
|
| 97 |
-
"Head Nurse/Nursing Director ",
|
| 98 |
-
"Dentist ",
|
| 99 |
-
"Physiotherapist ",
|
| 100 |
-
"General Outpatient/General Practitioner ",
|
| 101 |
-
"Cosmetic Surgeon",
|
| 102 |
-
"Pharmacist ",
|
| 103 |
-
"Nutritionist ",
|
| 104 |
-
"Acupuncturist/Masseur ",
|
| 105 |
-
"Optometrist ",
|
| 106 |
-
"Anesthetist ",
|
| 107 |
-
"Chauffeur ",
|
| 108 |
-
"Other Transportation Roles ",
|
| 109 |
-
"Designated Driver ",
|
| 110 |
-
"Bus/Subway Attendant ",
|
| 111 |
-
"Taxi Driver ",
|
| 112 |
-
"Train Attendant ",
|
| 113 |
-
"Train Driver/Operator ",
|
| 114 |
-
"Executive Driver ",
|
| 115 |
-
"Ground Staff ",
|
| 116 |
-
"Security Screener ",
|
| 117 |
-
"Passenger Driver ",
|
| 118 |
-
"Special Vehicle Driver ",
|
| 119 |
-
"Shuttle Bus Driver ",
|
| 120 |
-
"Flight Attendant ",
|
| 121 |
-
"Crew Member/Sailor ",
|
| 122 |
-
"Ship Attendant ",
|
| 123 |
-
"Ship Driver/Operator ",
|
| 124 |
-
"Freight Driver ",
|
| 125 |
-
"Aircraft Pilot/Operator ",
|
| 126 |
-
"Driving School Instructor/Coach ",
|
| 127 |
-
"VIP Specialist ",
|
| 128 |
-
"Pre-sales/Post-sales Technical Support Engineer ",
|
| 129 |
-
"Pre-sales/Post-sales Technical Support Management ",
|
| 130 |
-
"Pre-sales/Post-sales Service ",
|
| 131 |
-
"Customer Relationship Management ",
|
| 132 |
-
"Customer Service Hotline/Call Center Staff ",
|
| 133 |
-
"Customer Service Specialist/Assistant ",
|
| 134 |
-
"Other Customer Service Roles ",
|
| 135 |
-
"Customer Service Director ",
|
| 136 |
-
"Customer Service Manager/Supervisor ",
|
| 137 |
-
"Complaint Specialist ",
|
| 138 |
-
"Telephone Customer Service ",
|
| 139 |
-
"Online Customer Service ",
|
| 140 |
-
"Nanny ",
|
| 141 |
-
"Security Guard ",
|
| 142 |
-
"Cleaner ",
|
| 143 |
-
"Wedding/Celebration Planning Services ",
|
| 144 |
-
"Pet Care and Grooming ",
|
| 145 |
-
"Other Household Cleaning Services ",
|
| 146 |
-
"Home Appliance Repair ",
|
| 147 |
-
"Caregiver ",
|
| 148 |
-
"Maternity Matron ",
|
| 149 |
-
"Laundry Worker ",
|
| 150 |
-
"Infant Caregiver/Nursery Teacher ",
|
| 151 |
-
"Water Delivery Worker",
|
| 152 |
-
"Hourly Worker ",
|
| 153 |
-
"Business Development Specialist/Assistant ",
|
| 154 |
-
"Planning Manager/Supervisor ",
|
| 155 |
-
"Conference and Exhibition Specialist/Manager ",
|
| 156 |
-
"Promotion Supervisor/Director/Promoter ",
|
| 157 |
-
"Promotion Manager ",
|
| 158 |
-
"Public Relations Specialist/Assistant ",
|
| 159 |
-
"Public Relations Director ",
|
| 160 |
-
"Public Relations Manager/Supervisor ",
|
| 161 |
-
"Brand Specialist/Manager ",
|
| 162 |
-
"Media Specialist/Assistant ",
|
| 163 |
-
"Media Manager/Supervisor ",
|
| 164 |
-
"Media Sales ",
|
| 165 |
-
"Academic Promotion ",
|
| 166 |
-
"Marketing Specialist/Assistant ",
|
| 167 |
-
"Marketing Supervisor ",
|
| 168 |
-
"Other Marketing and Public Relations ",
|
| 169 |
-
"Market Expansion ",
|
| 170 |
-
"Market Planning ",
|
| 171 |
-
"Marketing Manager/Director ",
|
| 172 |
-
"Marketing ",
|
| 173 |
-
"Market Research ",
|
| 174 |
-
"Market Research and Analysis ",
|
| 175 |
-
"Channel Marketing Specialist ",
|
| 176 |
-
"Government Affairs Management ",
|
| 177 |
-
"Event Execution ",
|
| 178 |
-
"Event Planning ",
|
| 179 |
-
"Site Selection and Expansion/New Store Development ",
|
| 180 |
-
"Professional Consultant ",
|
| 181 |
-
"Corporate/Business Development Manager ",
|
| 182 |
-
"Corporate Planning ",
|
| 183 |
-
"Conference Specialist/Assistant ",
|
| 184 |
-
"Conference Manager/Supervisor ",
|
| 185 |
-
"Exhibition Planning/Design ",
|
| 186 |
-
"Creative Director ",
|
| 187 |
-
"Production Execution ",
|
| 188 |
-
"Consulting Director ",
|
| 189 |
-
"Consulting Manager/Supervisor ",
|
| 190 |
-
"Consultant ",
|
| 191 |
-
"Wedding Planner ",
|
| 192 |
-
"Media Planning/Management ",
|
| 193 |
-
"Client Supervisor/Specialist ",
|
| 194 |
-
"Advertising/Exhibition Business Development ",
|
| 195 |
-
"Advertising/Exhibition Project Management ",
|
| 196 |
-
"Advertising Creativity ",
|
| 197 |
-
"Other Advertising Consulting ",
|
| 198 |
-
"Advertising Account Director/Manager ",
|
| 199 |
-
"Advertising Copywriter ",
|
| 200 |
-
"Advertising Design ",
|
| 201 |
-
"Intelligence and Information Analysis",
|
| 202 |
-
"Immigration/Study Abroad Consultant ",
|
| 203 |
-
"Landscape/Scenic Designer ",
|
| 204 |
-
"Civil Engineering Surveyor ",
|
| 205 |
-
"Civil/Structural Engineer ",
|
| 206 |
-
"Urban Planning and Design ",
|
| 207 |
-
"Safety Management/Safety Officer ",
|
| 208 |
-
"Security Engineer ",
|
| 209 |
-
"Interior Decoration Designer ",
|
| 210 |
-
"Geotechnical Engineer ",
|
| 211 |
-
"Engineering Director ",
|
| 212 |
-
"Engineering Supervisor ",
|
| 213 |
-
"Engineering Equipment Management ",
|
| 214 |
-
"Engineering Documentation Management ",
|
| 215 |
-
"Engineering Project Management ",
|
| 216 |
-
"Municipal Engineer ",
|
| 217 |
-
"Curtain Wall Engineer ",
|
| 218 |
-
"Other Architecture Roles ",
|
| 219 |
-
"Architectural Drafting ",
|
| 220 |
-
"Construction Safety Management ",
|
| 221 |
-
"Architectural Engineer/Chief Engineer ",
|
| 222 |
-
"Construction Acceptance ",
|
| 223 |
-
"Construction Site Management ",
|
| 224 |
-
"Architectural Designer/Drafter ",
|
| 225 |
-
"Development and Reporting ",
|
| 226 |
-
"Construction Worker ",
|
| 227 |
-
"Construction Team Leader ",
|
| 228 |
-
"Line and Pipeline Engineering Technician ",
|
| 229 |
-
"Building Automation ",
|
| 230 |
-
"Cabinet Designer ",
|
| 231 |
-
"Water Conservancy/Port Engineering Technician ",
|
| 232 |
-
"Surveying/Mapping ",
|
| 233 |
-
"Blasting Engineer ",
|
| 234 |
-
"Hard Decoration Designer ",
|
| 235 |
-
"Water Supply and Drainage/Refrigeration/HVAC ",
|
| 236 |
-
"Structured Cabling/Weak Current ",
|
| 237 |
-
"Documentation Specialist ",
|
| 238 |
-
"Soft Decoration Designer ",
|
| 239 |
-
"Cost Estimator/Budget Analyst ",
|
| 240 |
-
"Road and Bridge Technician ",
|
| 241 |
-
"Host/Presenter ",
|
| 242 |
-
"Other Entertainment Roles ",
|
| 243 |
-
"Entertainment Hall Attendant ",
|
| 244 |
-
"Entertainment Marketing Planner ",
|
| 245 |
-
"Film/Video Post-Production ",
|
| 246 |
-
"Film Producer ",
|
| 247 |
-
"Executive Producer ",
|
| 248 |
-
"Executive Agent ",
|
| 249 |
-
"Photographer/Cameraman ",
|
| 250 |
-
"Projectionist ",
|
| 251 |
-
"Lighting Technician",
|
| 252 |
-
"Film Marketing Manager ",
|
| 253 |
-
"Short Video Editor ",
|
| 254 |
-
"Short Video Planner ",
|
| 255 |
-
"Short Video Director ",
|
| 256 |
-
"Short Video Operations ",
|
| 257 |
-
"Protocol/Reception ",
|
| 258 |
-
"Signed Artist ",
|
| 259 |
-
"Agent Assistant ",
|
| 260 |
-
"Coordinating Producer ",
|
| 261 |
-
"Artist Assistant ",
|
| 262 |
-
"Artist Agent ",
|
| 263 |
-
"Artist Coordinator ",
|
| 264 |
-
"Program Director ",
|
| 265 |
-
"Program Director and Planner ",
|
| 266 |
-
"Video Editing Specialist ",
|
| 267 |
-
"Video Editing Assistant ",
|
| 268 |
-
"Video Editor ",
|
| 269 |
-
"Bartender ",
|
| 270 |
-
"Voice Actor ",
|
| 271 |
-
"Bar Waitstaff ",
|
| 272 |
-
"Sound Engineer ",
|
| 273 |
-
"Other Real Estate Positions ",
|
| 274 |
-
"Real Estate Internal Staff ",
|
| 275 |
-
"Real Estate Customer Service ",
|
| 276 |
-
"Real Estate Clerk/Assistant ",
|
| 277 |
-
"Real Estate Store Manager ",
|
| 278 |
-
"Real Estate Development/Planning ",
|
| 279 |
-
"Real Estate Agent ",
|
| 280 |
-
"Real Estate Appraiser ",
|
| 281 |
-
"Real Estate Brokerage/Transactions ",
|
| 282 |
-
"Real Estate Investment Analyst ",
|
| 283 |
-
"Real Estate Asset Management ",
|
| 284 |
-
"Real Estate Sales Supervisor ",
|
| 285 |
-
"Real Estate Sales Manager ",
|
| 286 |
-
"Real Estate Project Development and Reporting ",
|
| 287 |
-
"Real Estate Project Bidding ",
|
| 288 |
-
"Real Estate Project Planning Specialist/Assistant ",
|
| 289 |
-
"Real Estate Project Planning Manager/Supervisor ",
|
| 290 |
-
"Real Estate Project Management ",
|
| 291 |
-
"Real Estate Project Support Engineer ",
|
| 292 |
-
"Inspector ",
|
| 293 |
-
"Property Consultant ",
|
| 294 |
-
"Physical Education Teacher/Coach ",
|
| 295 |
-
"Part-time Teacher ",
|
| 296 |
-
"Middle School Teacher ",
|
| 297 |
-
"Training Assistant ",
|
| 298 |
-
"Trainer/Instructor ",
|
| 299 |
-
"Training Supervisor ",
|
| 300 |
-
"Training Planner ",
|
| 301 |
-
"Foreign Teacher",
|
| 302 |
-
"Foreign Language Teacher ",
|
| 303 |
-
"University Lecturer ",
|
| 304 |
-
"Academic Research/Scientific Research ",
|
| 305 |
-
"Tutor ",
|
| 306 |
-
"Primary School Teacher ",
|
| 307 |
-
"Preschool/Early Childhood Educator ",
|
| 308 |
-
"Admissions/Course Consultant ",
|
| 309 |
-
"Teaching/Academic Administration ",
|
| 310 |
-
"Teaching/Academic Administrative Staff ",
|
| 311 |
-
"Teacher/Teaching Assistant ",
|
| 312 |
-
"Educational Product Development ",
|
| 313 |
-
"Other Education and Training ",
|
| 314 |
-
"Liberal Arts Teacher ",
|
| 315 |
-
"Principal ",
|
| 316 |
-
"Science Teacher ",
|
| 317 |
-
"Postgraduate Entrance Exam/Civil Service Exam Trainer ",
|
| 318 |
-
"Vocational Technical Teacher ",
|
| 319 |
-
"Outdoor Adventure Trainer ",
|
| 320 |
-
"Music/Art Teacher ",
|
| 321 |
-
"High School Teacher ",
|
| 322 |
-
"Tour Guide ",
|
| 323 |
-
"Tourism Product/Itinerary Planner ",
|
| 324 |
-
"Other Tourism ",
|
| 325 |
-
"Travel Consultant ",
|
| 326 |
-
"Visa Specialist ",
|
| 327 |
-
"Tour Coordinator ",
|
| 328 |
-
"Ticketing Agent ",
|
| 329 |
-
"Handyman ",
|
| 330 |
-
"Cutter/Welder ",
|
| 331 |
-
"Refrigeration/Plumbing Technician ",
|
| 332 |
-
"Packager ",
|
| 333 |
-
"Printing Worker ",
|
| 334 |
-
"Pressing Worker ",
|
| 335 |
-
"Apprentice ",
|
| 336 |
-
"Mobile Phone Repair Technician ",
|
| 337 |
-
"Pressing Worker ",
|
| 338 |
-
"Operator ",
|
| 339 |
-
"General Worker ",
|
| 340 |
-
"Other General/Technical Worker ",
|
| 341 |
-
"Carpenter ",
|
| 342 |
-
"Dyer ",
|
| 343 |
-
"Sample Garment Worker ",
|
| 344 |
-
"Cement Worker ",
|
| 345 |
-
"Painter ",
|
| 346 |
-
"Tiler ",
|
| 347 |
-
"Power Line Worker ",
|
| 348 |
-
"Electrician ",
|
| 349 |
-
"Elevator Technician ",
|
| 350 |
-
"Electroplating Worker ",
|
| 351 |
-
"Grinding/Stamping Worker",
|
| 352 |
-
"Pipefitter ",
|
| 353 |
-
"Textile Worker ",
|
| 354 |
-
"Assembler ",
|
| 355 |
-
"General Maintenance Worker ",
|
| 356 |
-
"Sewing Worker ",
|
| 357 |
-
"Lathe/Milling Machine Operator ",
|
| 358 |
-
"Rebar Worker ",
|
| 359 |
-
"Sheet Metal Worker ",
|
| 360 |
-
"Fitter ",
|
| 361 |
-
"Forklift Operator ",
|
| 362 |
-
"Casting/Injection Molding/Mold Worker ",
|
| 363 |
-
"Boiler Operator ",
|
| 364 |
-
"Loom Operator ",
|
| 365 |
-
"Warping Operator ",
|
| 366 |
-
"Apparel/Textile/Leather Technologist ",
|
| 367 |
-
"Apparel/Textile/Leather Merchandiser ",
|
| 368 |
-
"Other Apparel/Textile ",
|
| 369 |
-
"Apparel/Textile/Leather Quality Management ",
|
| 370 |
-
"Apparel/Textile Design Director ",
|
| 371 |
-
"Apparel Pattern Maker ",
|
| 372 |
-
"Fashion Designer ",
|
| 373 |
-
"Pattern Room/Pattern Grader ",
|
| 374 |
-
"Sample Maker ",
|
| 375 |
-
"Sizing Operator ",
|
| 376 |
-
"Production Management ",
|
| 377 |
-
"Computer Grader ",
|
| 378 |
-
"Pattern Maker/Sample Maker ",
|
| 379 |
-
"Textile Designer ",
|
| 380 |
-
"Spinning Operator ",
|
| 381 |
-
"Cutter ",
|
| 382 |
-
"Fabric/Accessory Development/Purchasing ",
|
| 383 |
-
"Footwear Designer ",
|
| 384 |
-
"Food/Beverage R&D/Inspection ",
|
| 385 |
-
"Food Production Worker ",
|
| 386 |
-
"CNC/Numerical Control Engineer ",
|
| 387 |
-
"Instrument/Measurement Engineer ",
|
| 388 |
-
"Train Maintenance/Servicing ",
|
| 389 |
-
"Train Design and Manufacturing ",
|
| 390 |
-
"Other Machinery/Instrument ",
|
| 391 |
-
"Mechanical Engineer ",
|
| 392 |
-
"Mechanical Maintenance/Servicing ",
|
| 393 |
-
"Electromechanical Engineer ",
|
| 394 |
-
"Pneumatic Engineer ",
|
| 395 |
-
"Test/Reliability Engineer ",
|
| 396 |
-
"Layout Design Engineer ",
|
| 397 |
-
"R&D Engineer ",
|
| 398 |
-
"Ship Maintenance/Servicing ",
|
| 399 |
-
"Ship Design and Manufacturing ",
|
| 400 |
-
"Assembly Technician ",
|
| 401 |
-
"Aircraft Maintenance/Servicing",
|
| 402 |
-
"Aircraft Design and Manufacturing ",
|
| 403 |
-
"4S Store Management ",
|
| 404 |
-
"Used Car Appraiser ",
|
| 405 |
-
"Parking Attendant ",
|
| 406 |
-
"Gas Station Attendant ",
|
| 407 |
-
"Engine/Assembly Engineer ",
|
| 408 |
-
"Safety Performance Engineer ",
|
| 409 |
-
"Automobile/Motorcycle Repair ",
|
| 410 |
-
"Automobile Mechanic ",
|
| 411 |
-
"Other Automotive Positions ",
|
| 412 |
-
"Automotive Engineering Project Management ",
|
| 413 |
-
"Automotive Structural Engineer ",
|
| 414 |
-
"Automotive Mechanical Engineer ",
|
| 415 |
-
"Automotive Inspection/Testing ",
|
| 416 |
-
"Automotive Electronics Engineer ",
|
| 417 |
-
"Automotive Electrician ",
|
| 418 |
-
"Automobile Detailing ",
|
| 419 |
-
"Automotive Design Engineer ",
|
| 420 |
-
"Automotive Quality Management/Inspection and Testing ",
|
| 421 |
-
"Automotive Parts Designer ",
|
| 422 |
-
"Car Wash Attendant ",
|
| 423 |
-
"Claims Specialist/Consultant ",
|
| 424 |
-
"Assembly Process Engineer ",
|
| 425 |
-
"Tire Technician ",
|
| 426 |
-
"Parts Sales ",
|
| 427 |
-
"Intellectual Property/Patent Consultant ",
|
| 428 |
-
"Contract Management ",
|
| 429 |
-
"Compliance Management ",
|
| 430 |
-
"Lawyer/Legal Consultant ",
|
| 431 |
-
"Legal Assistant ",
|
| 432 |
-
"Legal Specialist/Supervisor ",
|
| 433 |
-
"Other Legal Positions ",
|
| 434 |
-
"Store Copywriter ",
|
| 435 |
-
"Event Planner ",
|
| 436 |
-
"Other Taobao Positions ",
|
| 437 |
-
"Taobao Customer Service ",
|
| 438 |
-
"Taobao Graphic Designer ",
|
| 439 |
-
"Online Store Manager ",
|
| 440 |
-
"Online Store Operations ",
|
| 441 |
-
"Contract Management ",
|
| 442 |
-
"Investment Promotion Manager/Supervisor ",
|
| 443 |
-
"Property Investment Promotion Management ",
|
| 444 |
-
"Property Leasing/Sales ",
|
| 445 |
-
"Property Management/Commercial Center ",
|
| 446 |
-
"Other Property Management Positions ",
|
| 447 |
-
"Property Manager/Supervisor ",
|
| 448 |
-
"Property Maintenance ",
|
| 449 |
-
"Surveillance Maintenance ",
|
| 450 |
-
"Warehouse Administrator ",
|
| 451 |
-
"Warehouse Manager/Supervisor",
|
| 452 |
-
"Supply Chain Management ",
|
| 453 |
-
"Sorter ",
|
| 454 |
-
"Documentation Specialist ",
|
| 455 |
-
"International Freight ",
|
| 456 |
-
"Courier ",
|
| 457 |
-
"Customs Affairs Management ",
|
| 458 |
-
"Material Management ",
|
| 459 |
-
"Logistics Specialist/Assistant ",
|
| 460 |
-
"Other Logistics and Warehousing ",
|
| 461 |
-
"Logistics Director ",
|
| 462 |
-
"Logistics Manager/Supervisor ",
|
| 463 |
-
"Loader/Handler ",
|
| 464 |
-
"Dispatcher ",
|
| 465 |
-
"Freight Forwarder ",
|
| 466 |
-
"Container Business ",
|
| 467 |
-
"EHS Management ",
|
| 468 |
-
"Solid Wastewater and Exhaust Gas Treatment ",
|
| 469 |
-
"Solid Waste Treatment Engineer ",
|
| 470 |
-
"Geological Survey ",
|
| 471 |
-
"Exhaust Gas Treatment Engineer ",
|
| 472 |
-
"Control and Protection R&D Engineer ",
|
| 473 |
-
"Nuclear/Coal Power Engineer ",
|
| 474 |
-
"Water Conservancy/Hydropower Engineer ",
|
| 475 |
-
"Water Treatment Engineer ",
|
| 476 |
-
"Water Quality Inspector ",
|
| 477 |
-
"Other Environmental Protection/Energy ",
|
| 478 |
-
"Environmental Engineer ",
|
| 479 |
-
"Environmental Technology ",
|
| 480 |
-
"Environmental Testing ",
|
| 481 |
-
"Environmental Engineering Technology ",
|
| 482 |
-
"Environmental Management/Protection ",
|
| 483 |
-
"Environmental Management/Park and Scenic Area Protection ",
|
| 484 |
-
"Environmental Greening ",
|
| 485 |
-
"Environmental Assessment Engineer ",
|
| 486 |
-
"Ecological Management/Planning ",
|
| 487 |
-
"Power Electronics R&D Engineer ",
|
| 488 |
-
"Power System R&D Engineer ",
|
| 489 |
-
"Petroleum and Natural Gas Technician ",
|
| 490 |
-
"HVAC/Thermal Energy Engineer ",
|
| 491 |
-
"Energy/Mineral Project Management ",
|
| 492 |
-
"Product Management ",
|
| 493 |
-
"Manufacturing Engineer ",
|
| 494 |
-
"Packaging Engineer ",
|
| 495 |
-
"Laboratory/Inspection ",
|
| 496 |
-
"Plant Manager/Deputy Plant Manager ",
|
| 497 |
-
"Industrial Engineer ",
|
| 498 |
-
"Process Design ",
|
| 499 |
-
"Chief Engineer/Deputy Chief Engineer ",
|
| 500 |
-
"Technical Engineer ",
|
| 501 |
-
"Technical Documentation Engineer",
|
| 502 |
-
"Materials Engineer ",
|
| 503 |
-
"Production Supervisor/Leader ",
|
| 504 |
-
"Production Director ",
|
| 505 |
-
"Production Clerk ",
|
| 506 |
-
"Production Material Control (PMC) ",
|
| 507 |
-
"Other Production R&D ",
|
| 508 |
-
"Production Planning ",
|
| 509 |
-
"Production Order Follow-up ",
|
| 510 |
-
"Production Operations Management ",
|
| 511 |
-
"Production Project Engineer ",
|
| 512 |
-
"Production Project Manager/Supervisor ",
|
| 513 |
-
"Electronic Technology R&D Engineer ",
|
| 514 |
-
"Structural Engineer ",
|
| 515 |
-
"Maintenance Engineer ",
|
| 516 |
-
"Operations Supervisor ",
|
| 517 |
-
"Operations Manager ",
|
| 518 |
-
"Equipment Supervisor ",
|
| 519 |
-
"Equipment Management and Maintenance ",
|
| 520 |
-
"Quality Management ",
|
| 521 |
-
"Workshop Director ",
|
| 522 |
-
"FAE Field Application Engineer ",
|
| 523 |
-
"IC Verification Engineer ",
|
| 524 |
-
"Product Process/Planning Engineer ",
|
| 525 |
-
"Photovoltaic System Engineer ",
|
| 526 |
-
"Light Source/Lighting Engineer ",
|
| 527 |
-
"Semiconductor Technology ",
|
| 528 |
-
"Transformer and Magnetoelectric Engineer ",
|
| 529 |
-
"Security System Engineer ",
|
| 530 |
-
"Home Appliance/Digital Product R&D ",
|
| 531 |
-
"Embedded Hardware Development ",
|
| 532 |
-
"Embedded Software Development ",
|
| 533 |
-
"Radio Engineer ",
|
| 534 |
-
"Analog Circuit Design/Application Engineer ",
|
| 535 |
-
"Test/Reliability Engineer ",
|
| 536 |
-
"Laser/Optoelectronics Technology ",
|
| 537 |
-
"Lighting/Illumination Design Engineer ",
|
| 538 |
-
"Electrical R&D Engineer ",
|
| 539 |
-
"Electroacoustic/Audio Engineer/Technician ",
|
| 540 |
-
"Electronic/Electrical Process/Manufacturing Engineer ",
|
| 541 |
-
"Electronic/Electrical Maintenance ",
|
| 542 |
-
"Electronic/Electrical Equipment Engineer ",
|
| 543 |
-
"Electronic/Electrical Project Management ",
|
| 544 |
-
"Other Electronic/Electrical ",
|
| 545 |
-
"Electronic/Electrical Engineer ",
|
| 546 |
-
"Electronic Component Engineer ",
|
| 547 |
-
"Electronic Software Development ",
|
| 548 |
-
"Electrical Circuit Design ",
|
| 549 |
-
"Battery/Power Development ",
|
| 550 |
-
"Circuit Engineer/Technician ",
|
| 551 |
-
"R&D Engineer",
|
| 552 |
-
"Air Conditioning Engineer/Designer ",
|
| 553 |
-
"Line Structure Designer ",
|
| 554 |
-
"Automation Engineer ",
|
| 555 |
-
"Integrated Circuit/Application Engineer ",
|
| 556 |
-
"Audio/Video Engineer ",
|
| 557 |
-
"Host/Emcee ",
|
| 558 |
-
"Lead Designer ",
|
| 559 |
-
"Writer/Screenwriter/Copywriter ",
|
| 560 |
-
"Publishing/Distribution ",
|
| 561 |
-
"Paper Cutting Machine Operator ",
|
| 562 |
-
"Printing Operator ",
|
| 563 |
-
"Printing Machine Operator ",
|
| 564 |
-
"Creasing Operator ",
|
| 565 |
-
"Distribution Management ",
|
| 566 |
-
"Rewinding Operator ",
|
| 567 |
-
"Data Entry/Proofreading ",
|
| 568 |
-
"Editor-in-Chief/Deputy Editor-in-Chief/Chief Editor ",
|
| 569 |
-
"Drafting Machine Operator ",
|
| 570 |
-
"Typesetting Design/Production ",
|
| 571 |
-
"Projection Management ",
|
| 572 |
-
"Digital Direct Printing/Film Output ",
|
| 573 |
-
"Copywriting and Planning ",
|
| 574 |
-
"Text Editor/Content Compilation ",
|
| 575 |
-
"Plate Maker ",
|
| 576 |
-
"Actor/Model ",
|
| 577 |
-
"Lighting Technician ",
|
| 578 |
-
"Hot Stamping Operator ",
|
| 579 |
-
"Color Separation Operator ",
|
| 580 |
-
"Agent/Talent Scout ",
|
| 581 |
-
"Editor/Copywriter ",
|
| 582 |
-
"Other Editorial Publishing ",
|
| 583 |
-
"Art Director/Stage Design ",
|
| 584 |
-
"Binding/Hot Stamping ",
|
| 585 |
-
"Binding Worker ",
|
| 586 |
-
"Lamination Worker ",
|
| 587 |
-
"Video Streamer ",
|
| 588 |
-
"Journalist/Reporter ",
|
| 589 |
-
"Ink Technician ",
|
| 590 |
-
"Colorist ",
|
| 591 |
-
"Broadcast Engineer ",
|
| 592 |
-
"Makeup Artist ",
|
| 593 |
-
"Hairstylist ",
|
| 594 |
-
"Pet Grooming/Care ",
|
| 595 |
-
"Image Designer ",
|
| 596 |
-
"Makeup Trainer ",
|
| 597 |
-
"Shampoo Assistant ",
|
| 598 |
-
"Body Therapist ",
|
| 599 |
-
"Hairdressing Assistant/Apprentice ",
|
| 600 |
-
"Beauty/Slimming Consultant ",
|
| 601 |
-
"Beauty Assistant/Apprentice",
|
| 602 |
-
"Beauty Consultant ",
|
| 603 |
-
"Beautician ",
|
| 604 |
-
"Beauty Salon Manager ",
|
| 605 |
-
"Cosmetic Surgeon ",
|
| 606 |
-
"Other Beauty and Hairdressing ",
|
| 607 |
-
"Nail Technician ",
|
| 608 |
-
"CAD Designer/Drafter ",
|
| 609 |
-
"3D Design/Production ",
|
| 610 |
-
"Product/Packaging Designer ",
|
| 611 |
-
"Concept Artist ",
|
| 612 |
-
"Landscape Architect ",
|
| 613 |
-
"Multimedia/Animation Designer ",
|
| 614 |
-
"Furniture/Homeware Designer ",
|
| 615 |
-
"Industrial Designer ",
|
| 616 |
-
"Craft/Jewelry Designer ",
|
| 617 |
-
"Graphic Designer ",
|
| 618 |
-
"Store/Display/Exhibition Designer ",
|
| 619 |
-
"Fashion Designer ",
|
| 620 |
-
"Game Interface Designer ",
|
| 621 |
-
"Special Effects Designer ",
|
| 622 |
-
"Toy Designer ",
|
| 623 |
-
"Other Art and Creative ",
|
| 624 |
-
"Art Director ",
|
| 625 |
-
"Art Editor/Designer ",
|
| 626 |
-
"Stage Art Designer ",
|
| 627 |
-
"Art/Design Director ",
|
| 628 |
-
"Interior Design ",
|
| 629 |
-
"Visual Designer ",
|
| 630 |
-
"Design Manager ",
|
| 631 |
-
"Russian Translator ",
|
| 632 |
-
"Minor Language Translator ",
|
| 633 |
-
"German Translator ",
|
| 634 |
-
"Italian Translator ",
|
| 635 |
-
"Japanese Translator ",
|
| 636 |
-
"French Translator ",
|
| 637 |
-
"Other Translators ",
|
| 638 |
-
"English Translator ",
|
| 639 |
-
"Portuguese Translator ",
|
| 640 |
-
"Spanish Translator ",
|
| 641 |
-
"Arabic Translator ",
|
| 642 |
-
"Korean Translator ",
|
| 643 |
-
"Android Developer ",
|
| 644 |
-
"C Language Developer ",
|
| 645 |
-
"ERP Technical/Development Application ",
|
| 646 |
-
"Flash Designer/Developer ",
|
| 647 |
-
"iOS Developer ",
|
| 648 |
-
"Java Developer ",
|
| 649 |
-
"PHP Developer ",
|
| 650 |
-
"SEO Specialist ",
|
| 651 |
-
"UI/UX Designer",
|
| 652 |
-
"Web Frontend Developer ",
|
| 653 |
-
"Other Internet Roles ",
|
| 654 |
-
"Product Director ",
|
| 655 |
-
"Product Manager/Specialist ",
|
| 656 |
-
"Simulation Application Engineer ",
|
| 657 |
-
"Implementation Engineer ",
|
| 658 |
-
"Embedded Hardware Developer ",
|
| 659 |
-
"Embedded Software Developer ",
|
| 660 |
-
"WeChat Promotion ",
|
| 661 |
-
"Mobile Software Development Engineer ",
|
| 662 |
-
"Technical Specialist/Assistant ",
|
| 663 |
-
"Technical Director/Manager ",
|
| 664 |
-
"Technical Support/Maintenance ",
|
| 665 |
-
"Database Development Engineer ",
|
| 666 |
-
"Database Administrator/DBA ",
|
| 667 |
-
"Data Communication Engineer ",
|
| 668 |
-
"New Media Operations ",
|
| 669 |
-
"Wireless Communication Engineer ",
|
| 670 |
-
"Wired Transmission Engineer ",
|
| 671 |
-
"Test Engineer ",
|
| 672 |
-
"Taobao/WeChat Operations Specialist/Supervisor ",
|
| 673 |
-
"Game Concept Artist ",
|
| 674 |
-
"Game Interface Designer ",
|
| 675 |
-
"Game Planner ",
|
| 676 |
-
"Game Design/Development ",
|
| 677 |
-
"Special Effects Designer ",
|
| 678 |
-
"Telecom Switching Engineer ",
|
| 679 |
-
"Telecom Network Engineer ",
|
| 680 |
-
"E-commerce ",
|
| 681 |
-
"E-commerce Director ",
|
| 682 |
-
"Hardware Engineer ",
|
| 683 |
-
"Mobile Internet Developer ",
|
| 684 |
-
"Mobile Communication Engineer ",
|
| 685 |
-
"Programmer ",
|
| 686 |
-
"Algorithm Engineer ",
|
| 687 |
-
"Systems Analyst ",
|
| 688 |
-
"System Architect ",
|
| 689 |
-
"System Integration Engineer ",
|
| 690 |
-
"Online Store Manager ",
|
| 691 |
-
"Online Store Administrator ",
|
| 692 |
-
"Website Architecture Designer ",
|
| 693 |
-
"Website Planner ",
|
| 694 |
-
"Website Editor ",
|
| 695 |
-
"Website Operations ",
|
| 696 |
-
"Website Operations Director/Manager ",
|
| 697 |
-
"Network and Information Security Engineer ",
|
| 698 |
-
"Online Promotion ",
|
| 699 |
-
"Network Administrator ",
|
| 700 |
-
"Network Operations Specialist/Assistant ",
|
| 701 |
-
"Network Operations Management",
|
| 702 |
-
"Web Designer/Developer ",
|
| 703 |
-
"Script Development Engineer ",
|
| 704 |
-
"Computer-Aided Designer ",
|
| 705 |
-
"Voice/Video/Graphics ",
|
| 706 |
-
"Quality Engineer ",
|
| 707 |
-
"Software Engineer ",
|
| 708 |
-
"Operations Supervisor/Specialist ",
|
| 709 |
-
"Operations Director ",
|
| 710 |
-
"Telecommunication Technology Engineer ",
|
| 711 |
-
"Telecommunication Power Engineer ",
|
| 712 |
-
"Requirements Analyst ",
|
| 713 |
-
"Project Manager/Supervisor ",
|
| 714 |
-
"Senior Hardware Engineer ",
|
| 715 |
-
"Accountant ",
|
| 716 |
-
"Accounting Manager/Supervisor ",
|
| 717 |
-
"Cashier ",
|
| 718 |
-
"Audit Specialist/Assistant ",
|
| 719 |
-
"Audit Manager/Supervisor ",
|
| 720 |
-
"Cost Administrator ",
|
| 721 |
-
"Tax Specialist/Assistant ",
|
| 722 |
-
"Tax Manager/Supervisor ",
|
| 723 |
-
"Statistician ",
|
| 724 |
-
"Finance/Accounting Assistant ",
|
| 725 |
-
"Other Finance Roles ",
|
| 726 |
-
"Financial Analyst ",
|
| 727 |
-
"Finance Director ",
|
| 728 |
-
"Finance Manager/Supervisor ",
|
| 729 |
-
"Financial Consultant ",
|
| 730 |
-
"Asset/Fund Management ",
|
| 731 |
-
"Chief Financial Officer (CFO) ",
|
| 732 |
-
"System Engineer ",
|
| 733 |
-
"Safety and Fire Protection ",
|
| 734 |
-
"Safety Management ",
|
| 735 |
-
"Fault Analysis Engineer ",
|
| 736 |
-
"Test Engineer ",
|
| 737 |
-
"Certification Engineer/Auditor ",
|
| 738 |
-
"Other Quality Inspection/Security Roles ",
|
| 739 |
-
"Quality Inspector/Tester ",
|
| 740 |
-
"Quality Management/Test Manager ",
|
| 741 |
-
"Business Order Manager ",
|
| 742 |
-
"Buyer ",
|
| 743 |
-
"Supplier Development ",
|
| 744 |
-
"Supply Chain Management ",
|
| 745 |
-
"Assistant Business Order Coordinator ",
|
| 746 |
-
"Business Specialist/Manager ",
|
| 747 |
-
"International Trade Supervisor/Specialist ",
|
| 748 |
-
"Foreign Trade Specialist/Assistant ",
|
| 749 |
-
"Foreign Trade Manager/Supervisor ",
|
| 750 |
-
"Customs Declarer ",
|
| 751 |
-
"Other Trade Roles",
|
| 752 |
-
"Trade Order Specialist ",
|
| 753 |
-
"Purchasing Assistant ",
|
| 754 |
-
"Purchaser ",
|
| 755 |
-
"Purchasing Manager/Director ",
|
| 756 |
-
"Senior Sales Order Specialist ",
|
| 757 |
-
"Promoter/Sales Guide ",
|
| 758 |
-
"Category Management ",
|
| 759 |
-
"Luxury Goods Business ",
|
| 760 |
-
"Store Clerk/Sales Associate ",
|
| 761 |
-
"Store Manager/Retail Manager ",
|
| 762 |
-
"Investment Promotion Manager/Supervisor ",
|
| 763 |
-
"Cashier ",
|
| 764 |
-
"Stock Clerk/Merchandiser ",
|
| 765 |
-
"Supervisor ",
|
| 766 |
-
"Supermarket/Retail Other ",
|
| 767 |
-
"Loss Prevention Officer/Internal Security ",
|
| 768 |
-
"Food Processing/Handling ",
|
| 769 |
-
"Fitness Coach ",
|
| 770 |
-
"Billiards Coach ",
|
| 771 |
-
"Swimming Coach ",
|
| 772 |
-
"Yoga Instructor ",
|
| 773 |
-
"Dance Teacher ",
|
| 774 |
-
"Sports and Fitness Other ",
|
| 775 |
-
"Golf Assistant ",
|
| 776 |
-
"Duty Manager ",
|
| 777 |
-
"Public Area Manager ",
|
| 778 |
-
"Front Office Staff ",
|
| 779 |
-
"Front Office Manager ",
|
| 780 |
-
"Receptionist ",
|
| 781 |
-
"Front Desk Supervisor ",
|
| 782 |
-
"Assistant Lobby Manager ",
|
| 783 |
-
"Room Attendant ",
|
| 784 |
-
"Housekeeping Manager ",
|
| 785 |
-
"Guest Relations Officer ",
|
| 786 |
-
"Switchboard Operator ",
|
| 787 |
-
"Switchboard Manager ",
|
| 788 |
-
"General Manager ",
|
| 789 |
-
"Assistant to General Manager ",
|
| 790 |
-
"Director of Rooms ",
|
| 791 |
-
"Lifeguard ",
|
| 792 |
-
"Floor Manager ",
|
| 793 |
-
"Laundry Manager ",
|
| 794 |
-
"Concierge Manager ",
|
| 795 |
-
"Hotel Other ",
|
| 796 |
-
"Hotel Store Manager ",
|
| 797 |
-
"Reservation Agent ",
|
| 798 |
-
"Reservation Manager ",
|
| 799 |
-
"Personal Banking ",
|
| 800 |
-
"Personal Banking Department Manager/Supervisor ",
|
| 801 |
-
"Credit Review",
|
| 802 |
-
"Credit Card/Bank Card Business ",
|
| 803 |
-
"Credit Card Sales ",
|
| 804 |
-
"Credit Management/Credit Assessment ",
|
| 805 |
-
"Credit Management/Credit Assessment/Analysis ",
|
| 806 |
-
"Corporate Business ",
|
| 807 |
-
"Corporate Business Department Manager/Supervisor ",
|
| 808 |
-
"Fund Project Manager ",
|
| 809 |
-
"Foreign Exchange/Fund/Government Bond Manager ",
|
| 810 |
-
"Foreign Exchange Trading ",
|
| 811 |
-
"Investment/Financial Management Services ",
|
| 812 |
-
"Investment/Financial Advisor ",
|
| 813 |
-
"Investment Manager ",
|
| 814 |
-
"Investment Banking ",
|
| 815 |
-
"Investment Banking Financial Analysis ",
|
| 816 |
-
"Guarantee/Auction/Pawn ",
|
| 817 |
-
"Auctioneer ",
|
| 818 |
-
"Clearing Staff ",
|
| 819 |
-
"General Business Specialist/Assistant ",
|
| 820 |
-
"Stock/Futures Trader ",
|
| 821 |
-
"Stock Trader ",
|
| 822 |
-
"Financing Specialist ",
|
| 823 |
-
"Director of Financing ",
|
| 824 |
-
"Financing Manager/Director ",
|
| 825 |
-
"Securities/Investment Client Supervisor ",
|
| 826 |
-
"Securities/Investment Client Director ",
|
| 827 |
-
"Securities/Investment Client Manager ",
|
| 828 |
-
"Securities/Futures/Forex Broker ",
|
| 829 |
-
"Securities Analysis/Financial Research ",
|
| 830 |
-
"Securities Manager/Director ",
|
| 831 |
-
"Asset Valuation ",
|
| 832 |
-
"Import/Export/Letter of Credit Settlement ",
|
| 833 |
-
"Financial/Economic Researcher ",
|
| 834 |
-
"Financial Product Manager ",
|
| 835 |
-
"Financial Product Sales ",
|
| 836 |
-
"Other Financial Investments ",
|
| 837 |
-
"Financial Services Manager ",
|
| 838 |
-
"Financial Leasing ",
|
| 839 |
-
"Bank Accountant/Teller ",
|
| 840 |
-
"Bank Manager/Director ",
|
| 841 |
-
"Risk Management/Control ",
|
| 842 |
-
"Senior Account Manager/Account Manager ",
|
| 843 |
-
"Business Analysis Manager/Supervisor/Specialist ",
|
| 844 |
-
"Business Development Manager/Supervisor ",
|
| 845 |
-
"Membership Consultant ",
|
| 846 |
-
"Regional Sales ",
|
| 847 |
-
"Regional Sales Director ",
|
| 848 |
-
"Regional Sales Manager/Supervisor ",
|
| 849 |
-
"Medical Device Sales ",
|
| 850 |
-
"Pharmaceutical Representative ",
|
| 851 |
-
"Group Purchase Salesperson/Manager",
|
| 852 |
-
"Key Account Manager ",
|
| 853 |
-
"Client Representative ",
|
| 854 |
-
"Client Director ",
|
| 855 |
-
"Client Manager/Supervisor ",
|
| 856 |
-
"Automobile Sales ",
|
| 857 |
-
"Channel/Distribution Director ",
|
| 858 |
-
"Channel/Distribution Manager/Supervisor ",
|
| 859 |
-
"Channel Specialist ",
|
| 860 |
-
"Channel Manager/Director ",
|
| 861 |
-
"Telemarketing ",
|
| 862 |
-
"Distributor ",
|
| 863 |
-
"Online Sales ",
|
| 864 |
-
"Sales Order Follow-up ",
|
| 865 |
-
"Sales Representative ",
|
| 866 |
-
"Other Sales Positions ",
|
| 867 |
-
"Sales Assistant ",
|
| 868 |
-
"Sales Trainer/Lecturer ",
|
| 869 |
-
"Sales Director ",
|
| 870 |
-
"Sales Support ",
|
| 871 |
-
"Sales Data Analyst ",
|
| 872 |
-
"Sales Manager/Supervisor ",
|
| 873 |
-
"Sales Administration Specialist/Assistant ",
|
| 874 |
-
"Sales Administration Manager/Supervisor ",
|
| 875 |
-
"Sales Operations Manager/Supervisor ",
|
| 876 |
-
"Northeast Cuisine Chef ",
|
| 877 |
-
"Southeast Asian Cuisine Chef ",
|
| 878 |
-
"Yunnan and Guizhou Cuisine Chef ",
|
| 879 |
-
"Beijing and Shandong Cuisine Chef ",
|
| 880 |
-
"Food Runner ",
|
| 881 |
-
"Kitchen Worker ",
|
| 882 |
-
"Chef/Head Chef ",
|
| 883 |
-
"Chef Assistant/Apprentice ",
|
| 884 |
-
"Back Kitchen ",
|
| 885 |
-
"Barista ",
|
| 886 |
-
"Sommelier ",
|
| 887 |
-
"Mexican Cuisine Chef ",
|
| 888 |
-
"Lobby Manager/Supervisor ",
|
| 889 |
-
"Apprentice ",
|
| 890 |
-
"Crayfish Chef ",
|
| 891 |
-
"Sichuan and Hunan Cuisine Chef ",
|
| 892 |
-
"Italian Cuisine Chef ",
|
| 893 |
-
"Japanese Cuisine Chef ",
|
| 894 |
-
"Waiter/Waitress ",
|
| 895 |
-
"General Helper ",
|
| 896 |
-
"Jiangsu and Zhejiang Cuisine Chef ",
|
| 897 |
-
"French Cuisine Chef ",
|
| 898 |
-
"Dishwasher ",
|
| 899 |
-
"Hot Pot Seasoning Cook ",
|
| 900 |
-
"Barbecue Chef ",
|
| 901 |
-
"Cantonese and Hong Kong Cuisine Chef",
|
| 902 |
-
"Tea Specialist ",
|
| 903 |
-
"Nutritionist ",
|
| 904 |
-
"Executive Chef ",
|
| 905 |
-
"Pastry Decorator ",
|
| 906 |
-
"Northwest Cuisine Chef ",
|
| 907 |
-
"Pastry Chef ",
|
| 908 |
-
"Spanish Cuisine Chef ",
|
| 909 |
-
"Greeter/Receptionist ",
|
| 910 |
-
"Food Delivery Person ",
|
| 911 |
-
"Kitchen Assistant ",
|
| 912 |
-
"Dim Sum Chef ",
|
| 913 |
-
"Reservation Agent ",
|
| 914 |
-
"Restaurant Server ",
|
| 915 |
-
"Other Food and Beverage Roles ",
|
| 916 |
-
"Food and Beverage Management ",
|
| 917 |
-
"CEO/President/General Manager ",
|
| 918 |
-
"Corporate Secretary/Board Secretary ",
|
| 919 |
-
"Branch Manager ",
|
| 920 |
-
"Vice President/Deputy General Manager ",
|
| 921 |
-
"Chief Representative of Office ",
|
| 922 |
-
"Partner ",
|
| 923 |
-
"Factory Director/Deputy Factory Director ",
|
| 924 |
-
"Director ",
|
| 925 |
-
"President's Assistant/General Manager's Assistant ",
|
| 926 |
-
"Investor Relations ",
|
| 927 |
-
"Principal/Vice Principal ",
|
| 928 |
-
"Department/Division Management ",
|
| 929 |
-
"Chief Technology Officer (CTO) ",
|
| 930 |
-
"Chief Financial Officer (CFO) ",
|
| 931 |
-
"Chief Operating Officer (COO) ",
|
| 932 |
-
"Other Senior Management Roles"
|
| 933 |
-
]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
generation_user_profile/code/data/occupations_english.json
DELETED
|
@@ -1,42 +0,0 @@
|
|
| 1 |
-
[
|
| 2 |
-
"Software Engineer",
|
| 3 |
-
"Doctor",
|
| 4 |
-
"Teacher",
|
| 5 |
-
"Lawyer",
|
| 6 |
-
"Accountant",
|
| 7 |
-
"Nurse",
|
| 8 |
-
"Marketing Manager",
|
| 9 |
-
"Chef",
|
| 10 |
-
"Electrician",
|
| 11 |
-
"Graphic Designer",
|
| 12 |
-
"Financial Analyst",
|
| 13 |
-
"Architect",
|
| 14 |
-
"Journalist",
|
| 15 |
-
"Pharmacist",
|
| 16 |
-
"Police Officer",
|
| 17 |
-
"Mechanical Engineer",
|
| 18 |
-
"Dentist",
|
| 19 |
-
"Sales Representative",
|
| 20 |
-
"Psychologist",
|
| 21 |
-
"Plumber",
|
| 22 |
-
"Veterinarian",
|
| 23 |
-
"Pilot",
|
| 24 |
-
"Librarian",
|
| 25 |
-
"Firefighter",
|
| 26 |
-
"Web Developer",
|
| 27 |
-
"Photographer",
|
| 28 |
-
"Physical Therapist",
|
| 29 |
-
"Carpenter",
|
| 30 |
-
"Social Worker",
|
| 31 |
-
"Electrician",
|
| 32 |
-
"Fitness Trainer",
|
| 33 |
-
"Interior Designer",
|
| 34 |
-
"Translator",
|
| 35 |
-
"Real Estate Agent",
|
| 36 |
-
"Scientist",
|
| 37 |
-
"Professor",
|
| 38 |
-
"Artist",
|
| 39 |
-
"Writer",
|
| 40 |
-
"Musician",
|
| 41 |
-
"Actor"
|
| 42 |
-
]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
generation_user_profile/code/output/new_user_profiles.json
DELETED
|
@@ -1,39 +0,0 @@
|
|
| 1 |
-
[
|
| 2 |
-
{
|
| 3 |
-
"Generated At": "2025-08-18 01:51:36",
|
| 4 |
-
"Profile Index": 1,
|
| 5 |
-
"Demographic Information": {
|
| 6 |
-
"Age": "28 years old, young adult",
|
| 7 |
-
"Gender": "Male",
|
| 8 |
-
"Location": {
|
| 9 |
-
"Country": "Canada",
|
| 10 |
-
"City": "West Humber-Clairville"
|
| 11 |
-
}
|
| 12 |
-
},
|
| 13 |
-
"Career and Work Identity": {
|
| 14 |
-
"Occupation": "Pharmacist dedicated to patient-centered care",
|
| 15 |
-
"Work Experience": "Internship in West Humber-Clairville pharmacy; focus on medication affordability and empathetic communication"
|
| 16 |
-
},
|
| 17 |
-
"Core Values, Beliefs, and Philosophy": {
|
| 18 |
-
"Personal Values": "Lifelong learning and empathetic patient care",
|
| 19 |
-
"Life Philosophy": "Growth through compassion and continuous self-improvement"
|
| 20 |
-
},
|
| 21 |
-
"Lifestyle and Daily Routine": {
|
| 22 |
-
"Daily Habits": "Morning journaling and patient-focused learning",
|
| 23 |
-
"Lifestyle Choices": "Balanced work hours with reflective downtime"
|
| 24 |
-
},
|
| 25 |
-
"Cultural and Social Context": {
|
| 26 |
-
"Cultural Background": "Canadian multicultural, values inclusivity and empathy",
|
| 27 |
-
"Social Connections": "Close-knit circle of thoughtful, like-minded professionals"
|
| 28 |
-
},
|
| 29 |
-
"Hobbies, Interests, and Lifestyle": {
|
| 30 |
-
"Hobbies": "Reflective journaling, healthcare policy study",
|
| 31 |
-
"Interests": "Exploring empathy's limits, analyzing healthcare access"
|
| 32 |
-
},
|
| 33 |
-
"Other Attributes": {
|
| 34 |
-
"Personal Story": "From pharmacy intern to compassionate pharmacist, motivated by patient struggles and continuous learning",
|
| 35 |
-
"Key Life Events": "Internship facing medication affordability at 24; patient-centered care course at 27"
|
| 36 |
-
},
|
| 37 |
-
"Summary": "I’m a 28-year-old pharmacist based in West Humber-Clairville, Canada, deeply committed to patient-centered care. My journey into pharmacy began with an internship in my local community, where I quickly became aware of the challenges many patients face, especially around medication affordability. This experience shaped my approach to healthcare, emphasizing empathy and understanding as much as clinical knowledge. I believe that true growth, both personally and professionally, comes from compassion and a dedication to continuous self-improvement.\n\nEvery day, I start with journaling, a practice that helps me reflect on my experiences and stay grounded in my values. I also dedicate time to learning—whether it’s about new medications, healthcare policies, or ways to better support my patients. Balancing focused work hours with moments of reflective downtime allows me to maintain both my effectiveness as a pharmacist and my own well-being.\n\nGrowing up in a multicultural Canadian environment, I’ve developed a strong appreciation for inclusivity and empathy. These values resonate through my close-knit circle of friends and colleagues, who are thoughtful professionals sharing similar commitments to healthcare and social equity. Outside of work, I’m passionate about exploring the boundaries of empathy and analyzing how healthcare access can be improved for vulnerable populations.\n\nOne of the pivotal moments in my career was completing a patient-centered care course at age 27, which deepened my understanding of how to truly listen and respond to patient needs. Looking back, my internship at 24 was a defining experience that ignited my motivation to advocate for patients and keep learning. Today, I see my role not just as dispensing medications but as a partner in my patients’ health journeys, striving to make a meaningful difference in their lives through compassionate care and informed support."
|
| 38 |
-
}
|
| 39 |
-
]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
generation_user_profile/code/temp_input.json
DELETED
|
@@ -1,17 +0,0 @@
|
|
| 1 |
-
{
|
| 2 |
-
"basic_info": {
|
| 3 |
-
"age": 25,
|
| 4 |
-
"gender": "male",
|
| 5 |
-
"occupation": {
|
| 6 |
-
"status": "Student"
|
| 7 |
-
},
|
| 8 |
-
"location": {
|
| 9 |
-
"city": "Toronto",
|
| 10 |
-
"country": "Canada"
|
| 11 |
-
}
|
| 12 |
-
},
|
| 13 |
-
"custom_values": {
|
| 14 |
-
"personal_values": "Integrity, responsibility, innovation, and collaboration. I believe in staying true to principles, taking accountability, continuously learning, and striving for excellence while valuing teamwork and shared growth",
|
| 15 |
-
"life_attitude": "I am a positive and optimistic person who believes in the power of hard work and perseverance. I approach challenges with a growth mindset, seeing them as opportunities for learning and improvement. I am driven by a desire to make a meaningful impact and contribute to the betterment of society. I believe in the importance of balance and seek to maintain a healthy lifestyle while pursuing my goals."
|
| 16 |
-
}
|
| 17 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
generation_user_profile/data/100.json
DELETED
|
@@ -1,395 +0,0 @@
|
|
| 1 |
-
{
|
| 2 |
-
"Career and Work Identity": {
|
| 3 |
-
"Business": {
|
| 4 |
-
"Strategies": {}
|
| 5 |
-
},
|
| 6 |
-
"Client": {
|
| 7 |
-
"UserPreferences": {},
|
| 8 |
-
"UserProfileAttributes": {}
|
| 9 |
-
},
|
| 10 |
-
"Company": {
|
| 11 |
-
"Industry": {},
|
| 12 |
-
"RevenueMetrics": {},
|
| 13 |
-
"Type": {}
|
| 14 |
-
},
|
| 15 |
-
"CompanyCulture": {
|
| 16 |
-
"Type": {}
|
| 17 |
-
},
|
| 18 |
-
"Experience": {
|
| 19 |
-
"Attributes": {},
|
| 20 |
-
"Salesforce": {}
|
| 21 |
-
},
|
| 22 |
-
"Goals": {
|
| 23 |
-
"FinancialAttributes": {},
|
| 24 |
-
"GoalsAndAspirations": {}
|
| 25 |
-
},
|
| 26 |
-
"Industry": {
|
| 27 |
-
"Expertise": {},
|
| 28 |
-
"TechProficiency": {}
|
| 29 |
-
},
|
| 30 |
-
"JobRole": {
|
| 31 |
-
"LocationPreferences": {},
|
| 32 |
-
"Responsibilities": {}
|
| 33 |
-
},
|
| 34 |
-
"Occupation": {
|
| 35 |
-
"Service": {}
|
| 36 |
-
},
|
| 37 |
-
"Organization": {
|
| 38 |
-
"Category": {},
|
| 39 |
-
"Guidelines": {},
|
| 40 |
-
"Preferences": {}
|
| 41 |
-
},
|
| 42 |
-
"PersonalGoals": {
|
| 43 |
-
"Goals": {},
|
| 44 |
-
"Meetings": {}
|
| 45 |
-
},
|
| 46 |
-
"PreviousExperience": {
|
| 47 |
-
"UserLevel": {}
|
| 48 |
-
},
|
| 49 |
-
"Profession": {
|
| 50 |
-
"PersonalBackgroundAttributes": {},
|
| 51 |
-
"ProfessionalAttributes": {},
|
| 52 |
-
"UserProfileAttributes": {}
|
| 53 |
-
},
|
| 54 |
-
"ProfessionalField": {
|
| 55 |
-
"Experience": {},
|
| 56 |
-
"Industry": {},
|
| 57 |
-
"Role": {}
|
| 58 |
-
},
|
| 59 |
-
"Role": {
|
| 60 |
-
"Background": {},
|
| 61 |
-
"CommunicationStyle": {},
|
| 62 |
-
"Contract": {},
|
| 63 |
-
"Industry": {},
|
| 64 |
-
"positionTitle": {}
|
| 65 |
-
},
|
| 66 |
-
"Skills": {
|
| 67 |
-
"TechnicalAttributes": {},
|
| 68 |
-
"UserProfileAttributes": {}
|
| 69 |
-
},
|
| 70 |
-
"Team": {
|
| 71 |
-
"dynamics": {}
|
| 72 |
-
},
|
| 73 |
-
"Technology": {
|
| 74 |
-
"Type": {}
|
| 75 |
-
},
|
| 76 |
-
"User": {
|
| 77 |
-
"BusinessContext": {},
|
| 78 |
-
"CampaignAttributes": {},
|
| 79 |
-
"UserAttributes": {}
|
| 80 |
-
},
|
| 81 |
-
"WorkEnvironment": {
|
| 82 |
-
"ContentOrganization": {},
|
| 83 |
-
"UserPreferences": {}
|
| 84 |
-
}
|
| 85 |
-
},
|
| 86 |
-
"Core Values, Beliefs, and Philosophy": {
|
| 87 |
-
"Personal": {
|
| 88 |
-
"ForgivenessLevel": {},
|
| 89 |
-
"PersonalAttributes": {}
|
| 90 |
-
},
|
| 91 |
-
"Philosophical Beliefs": {
|
| 92 |
-
"AnimalConsumption": {}
|
| 93 |
-
},
|
| 94 |
-
"PoliticalIdeology": {
|
| 95 |
-
"Views": {}
|
| 96 |
-
},
|
| 97 |
-
"Spirituality": {
|
| 98 |
-
"Personal Development": {}
|
| 99 |
-
},
|
| 100 |
-
"Sustainability": {
|
| 101 |
-
"Attachment": {}
|
| 102 |
-
}
|
| 103 |
-
},
|
| 104 |
-
"Cultural and Social Context": {
|
| 105 |
-
"Attitudes": {
|
| 106 |
-
"TowardsDrugs": {}
|
| 107 |
-
},
|
| 108 |
-
"Audience": {
|
| 109 |
-
"InvestorType": {}
|
| 110 |
-
},
|
| 111 |
-
"Communication": {
|
| 112 |
-
"Style": {}
|
| 113 |
-
},
|
| 114 |
-
"Community": {
|
| 115 |
-
"UserCharacteristics": {}
|
| 116 |
-
},
|
| 117 |
-
"CompanyCulture": {
|
| 118 |
-
"Culture": {}
|
| 119 |
-
},
|
| 120 |
-
"Culture": {
|
| 121 |
-
"PersonalAttributes": {},
|
| 122 |
-
"PersonalInterests": {}
|
| 123 |
-
},
|
| 124 |
-
"DataProcessing": {
|
| 125 |
-
"Nature": {}
|
| 126 |
-
},
|
| 127 |
-
"Exposure": {
|
| 128 |
-
"HistoricalTopics": {}
|
| 129 |
-
},
|
| 130 |
-
"Family": {
|
| 131 |
-
"size": {}
|
| 132 |
-
},
|
| 133 |
-
"Historical": {
|
| 134 |
-
"Background": {}
|
| 135 |
-
},
|
| 136 |
-
"Knowledge": {
|
| 137 |
-
"AboutRefugeeIssues": {}
|
| 138 |
-
},
|
| 139 |
-
"Leadership": {
|
| 140 |
-
"Style": {}
|
| 141 |
-
},
|
| 142 |
-
"LocalEvents": {
|
| 143 |
-
"Attendance": {}
|
| 144 |
-
},
|
| 145 |
-
"LocalLaws": {
|
| 146 |
-
"RhodeIsland": {}
|
| 147 |
-
},
|
| 148 |
-
"Political": {
|
| 149 |
-
"Views": {}
|
| 150 |
-
},
|
| 151 |
-
"Preferences": {
|
| 152 |
-
"ChildrenPreferences": {},
|
| 153 |
-
"PersonalPreferences": {}
|
| 154 |
-
},
|
| 155 |
-
"Priorities": {
|
| 156 |
-
"TravelGoals": {}
|
| 157 |
-
},
|
| 158 |
-
"Region": {
|
| 159 |
-
"Residence": {}
|
| 160 |
-
},
|
| 161 |
-
"School": {
|
| 162 |
-
"Environment": {}
|
| 163 |
-
},
|
| 164 |
-
"SocialActivities": {
|
| 165 |
-
"NightlifeExperience": {}
|
| 166 |
-
},
|
| 167 |
-
"SocialStigma": {
|
| 168 |
-
"Menstruation": {}
|
| 169 |
-
},
|
| 170 |
-
"SubstanceUse": {
|
| 171 |
-
"DrugAwareness": {}
|
| 172 |
-
},
|
| 173 |
-
"SupportSystems": {
|
| 174 |
-
"Availability": {}
|
| 175 |
-
}
|
| 176 |
-
},
|
| 177 |
-
"Demographic Information": {
|
| 178 |
-
"Demographics": {
|
| 179 |
-
"Age": {},
|
| 180 |
-
"CurrentLocation": {},
|
| 181 |
-
"Education": {},
|
| 182 |
-
"General": {},
|
| 183 |
-
"Identity": {},
|
| 184 |
-
"Origin": {},
|
| 185 |
-
"Region": {},
|
| 186 |
-
"TargetAudience": {}
|
| 187 |
-
},
|
| 188 |
-
"Family": {
|
| 189 |
-
"FamilyDynamics": {},
|
| 190 |
-
"PersonalAttributes": {},
|
| 191 |
-
"PersonalDemographics": {}
|
| 192 |
-
},
|
| 193 |
-
"Lifestyle": {
|
| 194 |
-
"budget": {}
|
| 195 |
-
},
|
| 196 |
-
"Professional": {
|
| 197 |
-
"Demographic": {},
|
| 198 |
-
"Professional Background": {}
|
| 199 |
-
},
|
| 200 |
-
"Socioeconomic": {
|
| 201 |
-
"UserProfile": {}
|
| 202 |
-
}
|
| 203 |
-
},
|
| 204 |
-
"Education and Learning": {
|
| 205 |
-
"AcademicProfile": {
|
| 206 |
-
"EducationLevel": {},
|
| 207 |
-
"EducationalBackground": {}
|
| 208 |
-
},
|
| 209 |
-
"EducationalInstitution": {
|
| 210 |
-
"Name": {}
|
| 211 |
-
},
|
| 212 |
-
"KnowledgeFamiliarity": {
|
| 213 |
-
"DifficultyLevel": {},
|
| 214 |
-
"MedicalTerminology": {}
|
| 215 |
-
},
|
| 216 |
-
"LearningPlatform": {
|
| 217 |
-
"Focus": {}
|
| 218 |
-
},
|
| 219 |
-
"PersonalAttributes": {
|
| 220 |
-
"FitnessPreferences": {},
|
| 221 |
-
"UserPreferences": {}
|
| 222 |
-
},
|
| 223 |
-
"PersonalExperience": {
|
| 224 |
-
"WorkingWithRefugees": {}
|
| 225 |
-
},
|
| 226 |
-
"SubjectExpertise": {
|
| 227 |
-
"FocusArea": {}
|
| 228 |
-
},
|
| 229 |
-
"SubjectInterest": {
|
| 230 |
-
"User_Personalization": {}
|
| 231 |
-
},
|
| 232 |
-
"UnderstandingLevel": {
|
| 233 |
-
"Achievement": {},
|
| 234 |
-
"Creative_Education": {},
|
| 235 |
-
"Science_Education": {},
|
| 236 |
-
"Status": {}
|
| 237 |
-
}
|
| 238 |
-
},
|
| 239 |
-
"Emotional and Relational Skills": {
|
| 240 |
-
"Emotional Attributes": {
|
| 241 |
-
"EmotionalSupportNeeds": {}
|
| 242 |
-
},
|
| 243 |
-
"Environmental Attributes": {
|
| 244 |
-
"emotionalConnection": {}
|
| 245 |
-
},
|
| 246 |
-
"Personal Attributes": {
|
| 247 |
-
"Beliefs": {},
|
| 248 |
-
"Preferences": {}
|
| 249 |
-
},
|
| 250 |
-
"Work Attributes": {
|
| 251 |
-
"Drivers": {}
|
| 252 |
-
}
|
| 253 |
-
},
|
| 254 |
-
"Hobbies, Interests, and Lifestyle": {
|
| 255 |
-
"Education": {
|
| 256 |
-
"Interests": {}
|
| 257 |
-
},
|
| 258 |
-
"FoodPreferences": {
|
| 259 |
-
"Dietary Preference": {},
|
| 260 |
-
"Food Preference": {}
|
| 261 |
-
},
|
| 262 |
-
"Hobbies": {
|
| 263 |
-
"design": {},
|
| 264 |
-
"types": {}
|
| 265 |
-
},
|
| 266 |
-
"Interests": {
|
| 267 |
-
"ConsumerPreferences": {},
|
| 268 |
-
"CulturalInterest": {},
|
| 269 |
-
"UserPreferences": {}
|
| 270 |
-
},
|
| 271 |
-
"LifestylePreferences": {
|
| 272 |
-
"UserAttributes": {}
|
| 273 |
-
},
|
| 274 |
-
"Professional": {
|
| 275 |
-
"Interests": {}
|
| 276 |
-
},
|
| 277 |
-
"WorkRelatedInterests": {
|
| 278 |
-
"FinancialManagement": {},
|
| 279 |
-
"InvestmentPreferences": {}
|
| 280 |
-
},
|
| 281 |
-
"contentType": {
|
| 282 |
-
"AdCampaigns": {}
|
| 283 |
-
}
|
| 284 |
-
},
|
| 285 |
-
"Lifestyle and Daily Routine": {
|
| 286 |
-
"Dietary Preferences": {
|
| 287 |
-
"DailyContext": {},
|
| 288 |
-
"FamilyContext": {},
|
| 289 |
-
"HealthConsiderations": {},
|
| 290 |
-
"Preferences": {}
|
| 291 |
-
},
|
| 292 |
-
"Living Conditions": {
|
| 293 |
-
"BuyingIntention": {}
|
| 294 |
-
},
|
| 295 |
-
"Personal Lifestyle": {
|
| 296 |
-
"Preferences": {}
|
| 297 |
-
}
|
| 298 |
-
},
|
| 299 |
-
"Media Consumption and Engagement": {
|
| 300 |
-
"PersonalizationAttributes": {
|
| 301 |
-
"UserPreferences": {}
|
| 302 |
-
}
|
| 303 |
-
},
|
| 304 |
-
"Physical and Health Characteristics": {
|
| 305 |
-
"EnvironmentalFactors": {
|
| 306 |
-
"SoilType": {}
|
| 307 |
-
},
|
| 308 |
-
"GeneticHistory": {
|
| 309 |
-
"GeneticDisorders": {}
|
| 310 |
-
},
|
| 311 |
-
"HealthObjectives": {
|
| 312 |
-
"CardiovascularWellness": {}
|
| 313 |
-
},
|
| 314 |
-
"MedicalHistory": {
|
| 315 |
-
"General": {}
|
| 316 |
-
},
|
| 317 |
-
"PersonalHealthAttributes": {
|
| 318 |
-
"DietaryPreferences": {},
|
| 319 |
-
"General": {},
|
| 320 |
-
"HealthConditions": {}
|
| 321 |
-
}
|
| 322 |
-
},
|
| 323 |
-
"Psychological and Cognitive Aspects": {
|
| 324 |
-
"BehavioralAttributes": {
|
| 325 |
-
"AlcoholConsumptionHistory": {}
|
| 326 |
-
},
|
| 327 |
-
"CognitiveAttributes": {
|
| 328 |
-
"CognitiveAttributes": {},
|
| 329 |
-
"DevelopmentalAttributes": {},
|
| 330 |
-
"EmotionalAttributes": {},
|
| 331 |
-
"PreferenceAttributes": {}
|
| 332 |
-
},
|
| 333 |
-
"CopingMechanisms": {
|
| 334 |
-
"PersonalHistory": {}
|
| 335 |
-
},
|
| 336 |
-
"EmotionalAttributes": {
|
| 337 |
-
"PersonalAttributes": {},
|
| 338 |
-
"PsychologicalFactors": {}
|
| 339 |
-
},
|
| 340 |
-
"MentalAttributes": {
|
| 341 |
-
"CognitiveAttributes": {},
|
| 342 |
-
"UserPreferences": {}
|
| 343 |
-
},
|
| 344 |
-
"Past": {
|
| 345 |
-
"IndividualCharacteristics": {}
|
| 346 |
-
},
|
| 347 |
-
"PersonalityAttributes": {
|
| 348 |
-
"Style": {}
|
| 349 |
-
},
|
| 350 |
-
"User": {
|
| 351 |
-
"EmotionalState": {}
|
| 352 |
-
}
|
| 353 |
-
},
|
| 354 |
-
"Relationships and Social Networks": {
|
| 355 |
-
"CustomerRelations": {
|
| 356 |
-
"UserEngagement": {},
|
| 357 |
-
"UserProfile": {}
|
| 358 |
-
},
|
| 359 |
-
"FamilyRelations": {
|
| 360 |
-
"CurrentLocation": {},
|
| 361 |
-
"CurrentState": {},
|
| 362 |
-
"FamilyDynamics": {},
|
| 363 |
-
"FamilyMaritalStatus": {},
|
| 364 |
-
"RelationshipDetails": {}
|
| 365 |
-
},
|
| 366 |
-
"PersonalPreferences": {
|
| 367 |
-
"Companions": {}
|
| 368 |
-
},
|
| 369 |
-
"PersonalRelationships": {
|
| 370 |
-
"Availability": {},
|
| 371 |
-
"Context": {},
|
| 372 |
-
"SocialConnections": {},
|
| 373 |
-
"SocialInfluence": {},
|
| 374 |
-
"UniversityAffiliation": {}
|
| 375 |
-
},
|
| 376 |
-
"ProfessionalRelations": {
|
| 377 |
-
"PersonalAttributes": {}
|
| 378 |
-
},
|
| 379 |
-
"ProfessionalRelationships": {
|
| 380 |
-
"Colleagues": {},
|
| 381 |
-
"Connections": {},
|
| 382 |
-
"Duration": {},
|
| 383 |
-
"HeadOfSalesRelationship": {},
|
| 384 |
-
"Interests": {},
|
| 385 |
-
"Preferences": {},
|
| 386 |
-
"Relationship": {},
|
| 387 |
-
"RelationshipQuality": {},
|
| 388 |
-
"Role": {},
|
| 389 |
-
"ZichengExperience": {}
|
| 390 |
-
},
|
| 391 |
-
"UserAttributes": {
|
| 392 |
-
"FatherRelationship": {}
|
| 393 |
-
}
|
| 394 |
-
}
|
| 395 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
generation_user_profile/data/attribute_embeddings.pkl
DELETED
|
@@ -1,3 +0,0 @@
|
|
| 1 |
-
version https://git-lfs.github.com/spec/v1
|
| 2 |
-
oid sha256:664f3d1f49a5a3162108da60e4340411f01fdf58a38419387ddb1cdd0ee61481
|
| 3 |
-
size 28364886
|
|
|
|
|
|
|
|
|
|
|
|
generation_user_profile/data/attributes_merged.json
DELETED
|
The diff for this file is too large to render.
See raw diff
|
|
|
generation_user_profile/data/large_attributes.json
DELETED
|
The diff for this file is too large to render.
See raw diff
|
|
|
generation_user_profile/output/selected_paths.json
DELETED
|
@@ -1,898 +0,0 @@
|
|
| 1 |
-
{
|
| 2 |
-
"Demographic Information": {
|
| 3 |
-
"Age": {
|
| 4 |
-
"General": {},
|
| 5 |
-
"Youth": {},
|
| 6 |
-
"LifeStage": {},
|
| 7 |
-
"SpecificAge": {},
|
| 8 |
-
"MiddleAged": {},
|
| 9 |
-
"Group": {},
|
| 10 |
-
"GroupCategory": {},
|
| 11 |
-
"SuitableContent": {}
|
| 12 |
-
},
|
| 13 |
-
"Background": {
|
| 14 |
-
"Cultural Background": {}
|
| 15 |
-
},
|
| 16 |
-
"Personal": {
|
| 17 |
-
"Interests": {}
|
| 18 |
-
},
|
| 19 |
-
"Travel Preferences": {
|
| 20 |
-
"Frequent Traveler": {}
|
| 21 |
-
},
|
| 22 |
-
"birth_date": {
|
| 23 |
-
"specific_date": {}
|
| 24 |
-
},
|
| 25 |
-
"Life Stage": {
|
| 26 |
-
"Maturity Level": {}
|
| 27 |
-
},
|
| 28 |
-
"Family": {
|
| 29 |
-
"Household Composition": {},
|
| 30 |
-
"Role Information": {}
|
| 31 |
-
},
|
| 32 |
-
"Community": {
|
| 33 |
-
"Engagement": {}
|
| 34 |
-
},
|
| 35 |
-
"Information": {
|
| 36 |
-
"Age": {}
|
| 37 |
-
},
|
| 38 |
-
"Education": {
|
| 39 |
-
"Proficiency": {}
|
| 40 |
-
},
|
| 41 |
-
"Race": {
|
| 42 |
-
"Ethnicity": {}
|
| 43 |
-
},
|
| 44 |
-
"income": {
|
| 45 |
-
"level": {}
|
| 46 |
-
},
|
| 47 |
-
"Economic Status": {
|
| 48 |
-
"Budget": {}
|
| 49 |
-
},
|
| 50 |
-
"Gender": {
|
| 51 |
-
"Identity": {},
|
| 52 |
-
"Preferences": {},
|
| 53 |
-
"Demographics": {}
|
| 54 |
-
},
|
| 55 |
-
"RelocationWillingness": {}
|
| 56 |
-
},
|
| 57 |
-
"Hobbies, Interests, and Lifestyle": {
|
| 58 |
-
"Interests": {
|
| 59 |
-
"Movies": {},
|
| 60 |
-
"Cooking": {},
|
| 61 |
-
"Design": {},
|
| 62 |
-
"LanguageLearning": {
|
| 63 |
-
"knowledge": {}
|
| 64 |
-
},
|
| 65 |
-
"Lifestyle": {},
|
| 66 |
-
"Sustainability": {},
|
| 67 |
-
"PhilosophyTopics": {},
|
| 68 |
-
"Scenarios": {},
|
| 69 |
-
"Culture": {},
|
| 70 |
-
"UniqueExperiences": {},
|
| 71 |
-
"Gardening": {},
|
| 72 |
-
"Sports": {},
|
| 73 |
-
"Wellness": {
|
| 74 |
-
"practices": {}
|
| 75 |
-
},
|
| 76 |
-
"Food": {
|
| 77 |
-
"preparation": {}
|
| 78 |
-
},
|
| 79 |
-
"SelfImprovement": {},
|
| 80 |
-
"Groups": {},
|
| 81 |
-
"Storytelling": {},
|
| 82 |
-
"Seasons": {},
|
| 83 |
-
"SocialContributions": {},
|
| 84 |
-
"HistoricalThemes": {},
|
| 85 |
-
"Nature": {},
|
| 86 |
-
"MusicGenres": {
|
| 87 |
-
"musical_involvement": {
|
| 88 |
-
"bass": {}
|
| 89 |
-
}
|
| 90 |
-
},
|
| 91 |
-
"Innovation": {},
|
| 92 |
-
"Advocacy": {},
|
| 93 |
-
"PhilosophicalFields": {},
|
| 94 |
-
"Science": {},
|
| 95 |
-
"GameDevelopment": {},
|
| 96 |
-
"Reading": {},
|
| 97 |
-
"Literature": {},
|
| 98 |
-
"Film": {}
|
| 99 |
-
},
|
| 100 |
-
"Photography": {
|
| 101 |
-
"User Preferences": {}
|
| 102 |
-
},
|
| 103 |
-
"Communication": {
|
| 104 |
-
"UserStyle": {
|
| 105 |
-
"preference": {}
|
| 106 |
-
}
|
| 107 |
-
},
|
| 108 |
-
"Events": {
|
| 109 |
-
"UserParticipationInterest": {}
|
| 110 |
-
},
|
| 111 |
-
"Spirituality": {
|
| 112 |
-
"personal_interest": {}
|
| 113 |
-
},
|
| 114 |
-
"Gardening": {
|
| 115 |
-
"UserExperience": {}
|
| 116 |
-
},
|
| 117 |
-
"Travel Interests": {
|
| 118 |
-
"Membership Preferences": {},
|
| 119 |
-
"Destination Preferences": {}
|
| 120 |
-
},
|
| 121 |
-
"Creative Interests": {
|
| 122 |
-
"ProfessionalArea": {},
|
| 123 |
-
"CognitiveTools": {}
|
| 124 |
-
},
|
| 125 |
-
"Art Interests": {
|
| 126 |
-
"UserPreferences": {}
|
| 127 |
-
},
|
| 128 |
-
"Culinary Preferences": {
|
| 129 |
-
"culinaryPreferences": {}
|
| 130 |
-
},
|
| 131 |
-
"Business Interests": {
|
| 132 |
-
"UserInterests": {}
|
| 133 |
-
},
|
| 134 |
-
"Children": {
|
| 135 |
-
"Relevance": {},
|
| 136 |
-
"Approaches": {}
|
| 137 |
-
},
|
| 138 |
-
"Projects": {
|
| 139 |
-
"DroneTechnology": {}
|
| 140 |
-
},
|
| 141 |
-
"Dietary Preferences": {
|
| 142 |
-
"User Interests": {}
|
| 143 |
-
},
|
| 144 |
-
"Outdoor Activities": {
|
| 145 |
-
"Camping": {}
|
| 146 |
-
},
|
| 147 |
-
"Entrepreneurial Interests": {
|
| 148 |
-
"Business_Strategy": {}
|
| 149 |
-
},
|
| 150 |
-
"Gaming": {
|
| 151 |
-
"UserInterest": {}
|
| 152 |
-
},
|
| 153 |
-
"Vehicles": {
|
| 154 |
-
"User Preferences": {}
|
| 155 |
-
},
|
| 156 |
-
"Travel Preferences": {
|
| 157 |
-
"Geographic Interests": {}
|
| 158 |
-
},
|
| 159 |
-
"User Interests": {
|
| 160 |
-
"personal_preferences": {}
|
| 161 |
-
},
|
| 162 |
-
"Hobbies": {
|
| 163 |
-
"interests": {}
|
| 164 |
-
},
|
| 165 |
-
"Writing": {
|
| 166 |
-
"experience_level": {}
|
| 167 |
-
},
|
| 168 |
-
"Entertainment Interests": {
|
| 169 |
-
"Industry": {}
|
| 170 |
-
},
|
| 171 |
-
"Goals": {
|
| 172 |
-
"Physical_Activity": {}
|
| 173 |
-
},
|
| 174 |
-
"Preferences": {
|
| 175 |
-
"activities": {}
|
| 176 |
-
},
|
| 177 |
-
"Financial Interests": {
|
| 178 |
-
"investment_goals": {}
|
| 179 |
-
},
|
| 180 |
-
"Professional Interests": {
|
| 181 |
-
"General Interests": {}
|
| 182 |
-
},
|
| 183 |
-
"Academic Interests": {
|
| 184 |
-
"Personal Interests": {}
|
| 185 |
-
}
|
| 186 |
-
},
|
| 187 |
-
"Education and Learning": {
|
| 188 |
-
"background": {
|
| 189 |
-
"Finance Skills": {},
|
| 190 |
-
"Prior Experience": {}
|
| 191 |
-
},
|
| 192 |
-
"FocusArea": {
|
| 193 |
-
"Domain": {},
|
| 194 |
-
"Leadership": {}
|
| 195 |
-
},
|
| 196 |
-
"learningApproach": {
|
| 197 |
-
"ContinuousIntegration": {}
|
| 198 |
-
},
|
| 199 |
-
"programmingSkills": {
|
| 200 |
-
"ExpertiseLevel": {}
|
| 201 |
-
},
|
| 202 |
-
"interests": {
|
| 203 |
-
"Preferences": {},
|
| 204 |
-
"Hobbies & Interests": {},
|
| 205 |
-
"Professional Interests": {}
|
| 206 |
-
},
|
| 207 |
-
"language_proficiency": {
|
| 208 |
-
"LearningAttributes": {}
|
| 209 |
-
},
|
| 210 |
-
"FieldOfStudy": {
|
| 211 |
-
"interests": {}
|
| 212 |
-
},
|
| 213 |
-
"highestLevel": {
|
| 214 |
-
"Higher Education": {}
|
| 215 |
-
},
|
| 216 |
-
"preferences": {
|
| 217 |
-
"Content Presentation": {}
|
| 218 |
-
},
|
| 219 |
-
"familiarity": {
|
| 220 |
-
"ExperienceLevel": {}
|
| 221 |
-
},
|
| 222 |
-
"competency": {
|
| 223 |
-
"Cognitive and Productivity Skills": {}
|
| 224 |
-
},
|
| 225 |
-
"personalDevelopment": {
|
| 226 |
-
"Interests": {}
|
| 227 |
-
},
|
| 228 |
-
"experience_level": {
|
| 229 |
-
"AI": {}
|
| 230 |
-
},
|
| 231 |
-
"subject_area": {
|
| 232 |
-
"interests": {}
|
| 233 |
-
},
|
| 234 |
-
"specific_interests": {},
|
| 235 |
-
"academic_background": {
|
| 236 |
-
"CreativeWorks": {}
|
| 237 |
-
},
|
| 238 |
-
"degree": {
|
| 239 |
-
"Specialization": {},
|
| 240 |
-
"field_of_study": {}
|
| 241 |
-
},
|
| 242 |
-
"academicFocus": {
|
| 243 |
-
"Interests": {}
|
| 244 |
-
},
|
| 245 |
-
"motivation": {
|
| 246 |
-
"educational_experience": {}
|
| 247 |
-
},
|
| 248 |
-
"research": {
|
| 249 |
-
"Interests": {}
|
| 250 |
-
},
|
| 251 |
-
"skillLevel": {
|
| 252 |
-
"Diversity of Skills": {},
|
| 253 |
-
"Analytical Skills": {}
|
| 254 |
-
},
|
| 255 |
-
"level_of_expertise": {
|
| 256 |
-
"technology": {}
|
| 257 |
-
},
|
| 258 |
-
"subject_matter": {
|
| 259 |
-
"Topic": {}
|
| 260 |
-
},
|
| 261 |
-
"knowledgeArea": {
|
| 262 |
-
"Personal Interests": {}
|
| 263 |
-
},
|
| 264 |
-
"academic_achievements": {
|
| 265 |
-
"education": {}
|
| 266 |
-
},
|
| 267 |
-
"writingSkills": {
|
| 268 |
-
"Level": {}
|
| 269 |
-
}
|
| 270 |
-
},
|
| 271 |
-
"Physical and Health Characteristics": {
|
| 272 |
-
"Health Profile": {
|
| 273 |
-
"Vitamin Levels": {}
|
| 274 |
-
},
|
| 275 |
-
"weight": {
|
| 276 |
-
"personal_targets": {}
|
| 277 |
-
},
|
| 278 |
-
"Beliefs": {
|
| 279 |
-
"Philosophy": {},
|
| 280 |
-
"AttitudesTowardsDrugs": {}
|
| 281 |
-
},
|
| 282 |
-
"Dietary Preferences": {
|
| 283 |
-
"ProteinIntakeGoals": {},
|
| 284 |
-
"Allergies": {}
|
| 285 |
-
},
|
| 286 |
-
"Thinking Patterns": {
|
| 287 |
-
"Goal-Oriented": {}
|
| 288 |
-
},
|
| 289 |
-
"Oral Health": {
|
| 290 |
-
"SpecificDentalCondition": {}
|
| 291 |
-
},
|
| 292 |
-
"Personal Health Factors": {
|
| 293 |
-
"Alcohol Use History": {}
|
| 294 |
-
},
|
| 295 |
-
"Dietary": {
|
| 296 |
-
"UserPreferences": {}
|
| 297 |
-
},
|
| 298 |
-
"Cognitive Style": {
|
| 299 |
-
"Reflective Development": {}
|
| 300 |
-
},
|
| 301 |
-
"Health Goals": {
|
| 302 |
-
"health_improvement": {}
|
| 303 |
-
},
|
| 304 |
-
"HealthHistory": {
|
| 305 |
-
"Conditions": {}
|
| 306 |
-
},
|
| 307 |
-
"Neurodiversity": {
|
| 308 |
-
"Dyslexia": {}
|
| 309 |
-
},
|
| 310 |
-
"Metabolism": {
|
| 311 |
-
"Basal Metabolic Rate": {}
|
| 312 |
-
},
|
| 313 |
-
"Health Conditions": {
|
| 314 |
-
"Neurodevelopmental Conditions": {}
|
| 315 |
-
},
|
| 316 |
-
"Medical History": {
|
| 317 |
-
"Allergy_Management": {}
|
| 318 |
-
},
|
| 319 |
-
"General Health": {
|
| 320 |
-
"Wellbeing": {}
|
| 321 |
-
},
|
| 322 |
-
"neurodiversity": {
|
| 323 |
-
"add-inattentive": {}
|
| 324 |
-
},
|
| 325 |
-
"Body": {
|
| 326 |
-
"Body Type": {
|
| 327 |
-
"Normal": {}
|
| 328 |
-
}
|
| 329 |
-
},
|
| 330 |
-
"Skin": {
|
| 331 |
-
"UserPreferences": {},
|
| 332 |
-
"SkinType": {}
|
| 333 |
-
},
|
| 334 |
-
"Fitness Level": {
|
| 335 |
-
"Current Status": {}
|
| 336 |
-
}
|
| 337 |
-
},
|
| 338 |
-
"Media Consumption and Engagement": {
|
| 339 |
-
"Books": {
|
| 340 |
-
"ContentPreferences": {},
|
| 341 |
-
"UserPreferences": {}
|
| 342 |
-
},
|
| 343 |
-
"reddit": {
|
| 344 |
-
"user_attributes": {}
|
| 345 |
-
},
|
| 346 |
-
"Preferences": {
|
| 347 |
-
"User Engagement": {},
|
| 348 |
-
"User Preferences": {}
|
| 349 |
-
},
|
| 350 |
-
"Music": {
|
| 351 |
-
"AnalysisDepth": {},
|
| 352 |
-
"ListeningPreferences": {}
|
| 353 |
-
},
|
| 354 |
-
"SocialMedia": {
|
| 355 |
-
"User Preferences": {
|
| 356 |
-
"use": {}
|
| 357 |
-
},
|
| 358 |
-
"User Engagement": {}
|
| 359 |
-
},
|
| 360 |
-
"PlatformPreference": {
|
| 361 |
-
"User Type": {}
|
| 362 |
-
},
|
| 363 |
-
"Celebrities": {
|
| 364 |
-
"FavoriteCelebrities": {}
|
| 365 |
-
},
|
| 366 |
-
"digital_tool_usage": {
|
| 367 |
-
"familiarity_with_automation_tools": {}
|
| 368 |
-
},
|
| 369 |
-
"QuestionStyle": {},
|
| 370 |
-
"Literature": {
|
| 371 |
-
"SciFiGenres": {}
|
| 372 |
-
},
|
| 373 |
-
"content_engagement": {
|
| 374 |
-
"personal_beliefs": {}
|
| 375 |
-
},
|
| 376 |
-
"preferred_channels": {
|
| 377 |
-
"communication_channels": {}
|
| 378 |
-
},
|
| 379 |
-
"story_prefs": {
|
| 380 |
-
"genres": {}
|
| 381 |
-
},
|
| 382 |
-
"FavoriteAuthors": {
|
| 383 |
-
"Historical": {}
|
| 384 |
-
},
|
| 385 |
-
"Preferred Platforms": {
|
| 386 |
-
"Libraries": {}
|
| 387 |
-
},
|
| 388 |
-
"Artistic": {
|
| 389 |
-
"Interests": {}
|
| 390 |
-
},
|
| 391 |
-
"news": {
|
| 392 |
-
"preferred_sources": {}
|
| 393 |
-
},
|
| 394 |
-
"Genre": {
|
| 395 |
-
"Interactive Storytelling": {}
|
| 396 |
-
},
|
| 397 |
-
"Engagement": {
|
| 398 |
-
"User Level": {},
|
| 399 |
-
"User Technical Proficiency": {}
|
| 400 |
-
},
|
| 401 |
-
"Preferred Sources": {
|
| 402 |
-
"Financial Information Sources": {}
|
| 403 |
-
},
|
| 404 |
-
"Gaming": {
|
| 405 |
-
"UsagePreferences": {}
|
| 406 |
-
},
|
| 407 |
-
"SpaceRelatedMedia": {},
|
| 408 |
-
"RecipeSources": {
|
| 409 |
-
"OnlineBlogs": {}
|
| 410 |
-
},
|
| 411 |
-
"sciFiThemes": {},
|
| 412 |
-
"streaming_service": {
|
| 413 |
-
"preferences": {}
|
| 414 |
-
},
|
| 415 |
-
"ArtisticInspirations": {},
|
| 416 |
-
"meme": {
|
| 417 |
-
"knowledge": {}
|
| 418 |
-
},
|
| 419 |
-
"Language": {
|
| 420 |
-
"LanguageAttributes": {}
|
| 421 |
-
}
|
| 422 |
-
},
|
| 423 |
-
"Psychological and Cognitive Aspects": {
|
| 424 |
-
"Mindset": {
|
| 425 |
-
"UserPreferences": {}
|
| 426 |
-
},
|
| 427 |
-
"Shame": {
|
| 428 |
-
"triggers": {}
|
| 429 |
-
},
|
| 430 |
-
"Innovation": {
|
| 431 |
-
"Openness": {}
|
| 432 |
-
},
|
| 433 |
-
"Openness": {
|
| 434 |
-
"Educational Background": {},
|
| 435 |
-
"Interest in Technology": {}
|
| 436 |
-
},
|
| 437 |
-
"Thinking Style": {
|
| 438 |
-
"personality_traits": {}
|
| 439 |
-
},
|
| 440 |
-
"Risk Tolerance": {
|
| 441 |
-
"Proficiency": {},
|
| 442 |
-
"General": {}
|
| 443 |
-
},
|
| 444 |
-
"Pattern Recognition": {
|
| 445 |
-
"ability": {}
|
| 446 |
-
},
|
| 447 |
-
"Thinking Patterns": {
|
| 448 |
-
"cognitiveProcess": {}
|
| 449 |
-
},
|
| 450 |
-
"Engagement": {},
|
| 451 |
-
"Challenges": {
|
| 452 |
-
"CognitiveAbilities": {}
|
| 453 |
-
},
|
| 454 |
-
"Personality": {
|
| 455 |
-
"Perfectionism": {},
|
| 456 |
-
"Introversion": {},
|
| 457 |
-
"PersonalityResults": {},
|
| 458 |
-
"AdventureSeeking": {},
|
| 459 |
-
"Empathy": {},
|
| 460 |
-
"Preference": {}
|
| 461 |
-
},
|
| 462 |
-
"Perspective": {
|
| 463 |
-
"PersonalAttributes": {}
|
| 464 |
-
},
|
| 465 |
-
"Personality Traits": {
|
| 466 |
-
"Interpersonal Dynamics": {}
|
| 467 |
-
},
|
| 468 |
-
"Needs": {
|
| 469 |
-
"reliability": {}
|
| 470 |
-
},
|
| 471 |
-
"Response": {
|
| 472 |
-
"ToAnger": {}
|
| 473 |
-
},
|
| 474 |
-
"Tone Preference": {},
|
| 475 |
-
"Motivation": {
|
| 476 |
-
"Wellness": {},
|
| 477 |
-
"Learning": {},
|
| 478 |
-
"Goals": {}
|
| 479 |
-
},
|
| 480 |
-
"Anxiety": {
|
| 481 |
-
"Level": {}
|
| 482 |
-
},
|
| 483 |
-
"Resilience": {
|
| 484 |
-
"PersonalExperience": {}
|
| 485 |
-
},
|
| 486 |
-
"Personal Insight": {
|
| 487 |
-
"Level of Self-Awareness": {}
|
| 488 |
-
},
|
| 489 |
-
"Stress Management": {
|
| 490 |
-
"WorkLifeAttributes": {}
|
| 491 |
-
},
|
| 492 |
-
"Problem Solving": {
|
| 493 |
-
"analyticalSkills": {}
|
| 494 |
-
},
|
| 495 |
-
"Favorite Genres": {
|
| 496 |
-
"Gaming": {}
|
| 497 |
-
},
|
| 498 |
-
"Perfectionism": {
|
| 499 |
-
"education_level": {}
|
| 500 |
-
},
|
| 501 |
-
"Mindfulness": {
|
| 502 |
-
"Personal Development": {}
|
| 503 |
-
},
|
| 504 |
-
"Curiosity": {
|
| 505 |
-
"IntellectualEngagement": {}
|
| 506 |
-
},
|
| 507 |
-
"User Interaction": {
|
| 508 |
-
"PreferredEngagementStyle": {}
|
| 509 |
-
},
|
| 510 |
-
"Math Skills": {
|
| 511 |
-
"proficiency_level": {}
|
| 512 |
-
},
|
| 513 |
-
"Productivity": {
|
| 514 |
-
"SkillLevel": {}
|
| 515 |
-
},
|
| 516 |
-
"Language Complexity": {
|
| 517 |
-
"Preference": {}
|
| 518 |
-
},
|
| 519 |
-
"Behavioral Patterns": {
|
| 520 |
-
"Personal Traits": {}
|
| 521 |
-
},
|
| 522 |
-
"Mental Well-being": {
|
| 523 |
-
"Stable": {}
|
| 524 |
-
},
|
| 525 |
-
"Emotional": {
|
| 526 |
-
"EmotionalAttributes": {}
|
| 527 |
-
},
|
| 528 |
-
"Political Views": {
|
| 529 |
-
"orientation": {}
|
| 530 |
-
},
|
| 531 |
-
"Goals": {
|
| 532 |
-
"Long-Term Strategy": {}
|
| 533 |
-
},
|
| 534 |
-
"Creativity": {
|
| 535 |
-
"PersonalStyle": {}
|
| 536 |
-
}
|
| 537 |
-
},
|
| 538 |
-
"Core Values, Beliefs, and Philosophy": {
|
| 539 |
-
"PersonalGrowth": {
|
| 540 |
-
"Resilience": {},
|
| 541 |
-
"PersonalBackground": {},
|
| 542 |
-
"Orientation": {}
|
| 543 |
-
},
|
| 544 |
-
"Beliefs": {
|
| 545 |
-
"Philosophy": {},
|
| 546 |
-
"Social Values": {}
|
| 547 |
-
},
|
| 548 |
-
"Wellness": {
|
| 549 |
-
"Approach_and_Attitudes": {}
|
| 550 |
-
},
|
| 551 |
-
"Travel_values": {
|
| 552 |
-
"authentic_culture": {}
|
| 553 |
-
},
|
| 554 |
-
"Lifestyle": {
|
| 555 |
-
"PersonalValues": {}
|
| 556 |
-
},
|
| 557 |
-
"learning_attitude": {
|
| 558 |
-
"openness": {}
|
| 559 |
-
},
|
| 560 |
-
"Philosophy": {
|
| 561 |
-
"generalAttributes": {}
|
| 562 |
-
},
|
| 563 |
-
"Values": {
|
| 564 |
-
"Discipline": {},
|
| 565 |
-
"Growth_Mindset": {},
|
| 566 |
-
"Education": {},
|
| 567 |
-
"Work_Ethic": {}
|
| 568 |
-
},
|
| 569 |
-
"Interests": {
|
| 570 |
-
"EthicalViews": {}
|
| 571 |
-
},
|
| 572 |
-
"Goals": {
|
| 573 |
-
"Career Goals": {}
|
| 574 |
-
},
|
| 575 |
-
"Morality": {
|
| 576 |
-
"relationship_preferences": {}
|
| 577 |
-
},
|
| 578 |
-
"Cultural": {
|
| 579 |
-
"Cultural Awareness": {}
|
| 580 |
-
},
|
| 581 |
-
"Life_perspective": {
|
| 582 |
-
"worldview": {}
|
| 583 |
-
},
|
| 584 |
-
"WorkEthic": {
|
| 585 |
-
"Values": {}
|
| 586 |
-
},
|
| 587 |
-
"EnvironmentalConcerns": {
|
| 588 |
-
"Sustainability Advocate": {}
|
| 589 |
-
},
|
| 590 |
-
"Ethics": {
|
| 591 |
-
"Dietary_Preferences": {}
|
| 592 |
-
},
|
| 593 |
-
"Educational_goals": {
|
| 594 |
-
"TemporalPerspective": {}
|
| 595 |
-
}
|
| 596 |
-
},
|
| 597 |
-
"Lifestyle and Daily Routine": {
|
| 598 |
-
"Daily Routine": {
|
| 599 |
-
"ShoppingHabits": {},
|
| 600 |
-
"TravelPreferences": {}
|
| 601 |
-
},
|
| 602 |
-
"Travel": {
|
| 603 |
-
"Experience": {}
|
| 604 |
-
},
|
| 605 |
-
"Location": {
|
| 606 |
-
"Community": {}
|
| 607 |
-
},
|
| 608 |
-
"Dietary Preferences": {
|
| 609 |
-
"dietaryConsiderations": {}
|
| 610 |
-
},
|
| 611 |
-
"Cooking": {
|
| 612 |
-
"SkillLevel": {},
|
| 613 |
-
"TimeAvailability": {}
|
| 614 |
-
},
|
| 615 |
-
"Time Management": {
|
| 616 |
-
"QualityOfLife": {}
|
| 617 |
-
},
|
| 618 |
-
"Stress Management": {
|
| 619 |
-
"general": {}
|
| 620 |
-
},
|
| 621 |
-
"Shopping": {
|
| 622 |
-
"OnlineBehavior": {},
|
| 623 |
-
"ShoppingBehavior": {}
|
| 624 |
-
},
|
| 625 |
-
"Activities": {
|
| 626 |
-
"Family Structure": {}
|
| 627 |
-
},
|
| 628 |
-
"Travel Preferences": {
|
| 629 |
-
"User Preferences": {}
|
| 630 |
-
},
|
| 631 |
-
"Sports": {
|
| 632 |
-
"endurance_sports": {}
|
| 633 |
-
},
|
| 634 |
-
"Wellness": {
|
| 635 |
-
"Personalized Routine": {}
|
| 636 |
-
},
|
| 637 |
-
"Leisure Activities": {
|
| 638 |
-
"Personal Preferences": {}
|
| 639 |
-
},
|
| 640 |
-
"Learning": {
|
| 641 |
-
"personal_dedication": {}
|
| 642 |
-
},
|
| 643 |
-
"Work Schedule": {
|
| 644 |
-
"attribute": {}
|
| 645 |
-
},
|
| 646 |
-
"Home Setup": {
|
| 647 |
-
"UserPreferences": {}
|
| 648 |
-
},
|
| 649 |
-
"Retirement": {
|
| 650 |
-
"Age": {}
|
| 651 |
-
},
|
| 652 |
-
"Sleep": {
|
| 653 |
-
"environment": {}
|
| 654 |
-
},
|
| 655 |
-
"Pet Ownership": {
|
| 656 |
-
"PersonalizationAttribute": {}
|
| 657 |
-
}
|
| 658 |
-
},
|
| 659 |
-
"Cultural and Social Context": {
|
| 660 |
-
"Linguistic": {
|
| 661 |
-
"Style": {}
|
| 662 |
-
},
|
| 663 |
-
"Cultural": {
|
| 664 |
-
"Mental Health Advocate": {}
|
| 665 |
-
},
|
| 666 |
-
"Community": {
|
| 667 |
-
"Volunteer Activities": {},
|
| 668 |
-
"Involvement": {},
|
| 669 |
-
"Impact": {}
|
| 670 |
-
},
|
| 671 |
-
"Food Preferences": {
|
| 672 |
-
"FoodPreferences": {},
|
| 673 |
-
"Restrictions": {}
|
| 674 |
-
},
|
| 675 |
-
"Personal Attitudes": {
|
| 676 |
-
"Recovery Orientation": {}
|
| 677 |
-
},
|
| 678 |
-
"Social": {
|
| 679 |
-
"Personal Identity": {}
|
| 680 |
-
},
|
| 681 |
-
"PersonalContext": {
|
| 682 |
-
"GeographicBackground": {}
|
| 683 |
-
},
|
| 684 |
-
"Personal Customs": {
|
| 685 |
-
"Traditional Practices": {}
|
| 686 |
-
},
|
| 687 |
-
"Communication": {
|
| 688 |
-
"CommunicationNorms": {}
|
| 689 |
-
},
|
| 690 |
-
"Life Stage": {
|
| 691 |
-
"Teenager": {}
|
| 692 |
-
},
|
| 693 |
-
"Company Culture": {
|
| 694 |
-
"Adaptability": {}
|
| 695 |
-
},
|
| 696 |
-
"Theme": {
|
| 697 |
-
"Social Context": {}
|
| 698 |
-
},
|
| 699 |
-
"Personal Culture": {
|
| 700 |
-
"Values": {}
|
| 701 |
-
},
|
| 702 |
-
"Financial Behavior": {
|
| 703 |
-
"Risk Tolerance": {}
|
| 704 |
-
},
|
| 705 |
-
"Life Experiences": {
|
| 706 |
-
"Variety": {}
|
| 707 |
-
},
|
| 708 |
-
"Religion": {
|
| 709 |
-
"ReligiousEngagement": {},
|
| 710 |
-
"Religion": {},
|
| 711 |
-
"ReligiousType": {}
|
| 712 |
-
},
|
| 713 |
-
"Personal Interests": {
|
| 714 |
-
"Academic Interests": {}
|
| 715 |
-
},
|
| 716 |
-
"cultural": {
|
| 717 |
-
"personal_information": {}
|
| 718 |
-
},
|
| 719 |
-
"Language": {
|
| 720 |
-
"Proficiency": {}
|
| 721 |
-
},
|
| 722 |
-
"Personal Values": {
|
| 723 |
-
"Privacy Orientation": {},
|
| 724 |
-
"Inclusivity Focus": {}
|
| 725 |
-
},
|
| 726 |
-
"Group Involvement": {
|
| 727 |
-
"Participation Level": {}
|
| 728 |
-
},
|
| 729 |
-
"Social Habits": {
|
| 730 |
-
"Coffee Culture Enthusiast": {}
|
| 731 |
-
},
|
| 732 |
-
"Personal Life": {
|
| 733 |
-
"Interaction Style": {}
|
| 734 |
-
},
|
| 735 |
-
"affiliation": {
|
| 736 |
-
"religious": {}
|
| 737 |
-
},
|
| 738 |
-
"DietaryPreferences": {
|
| 739 |
-
"personal_preferences": {}
|
| 740 |
-
},
|
| 741 |
-
"Beliefs": {
|
| 742 |
-
"Lifestyle_Attitudes": {},
|
| 743 |
-
"Personal_Interests": {}
|
| 744 |
-
},
|
| 745 |
-
"Preference": {
|
| 746 |
-
"Language Preferences": {}
|
| 747 |
-
},
|
| 748 |
-
"Values": {
|
| 749 |
-
"EthicalValues": {}
|
| 750 |
-
},
|
| 751 |
-
"Health Perspectives": {
|
| 752 |
-
"Aging Attitudes": {}
|
| 753 |
-
},
|
| 754 |
-
"Financial Preference": {
|
| 755 |
-
"Budget Conscious": {}
|
| 756 |
-
},
|
| 757 |
-
"Health Practices": {
|
| 758 |
-
"Traditional Approaches": {}
|
| 759 |
-
}
|
| 760 |
-
},
|
| 761 |
-
"Core Values and Beliefs": {
|
| 762 |
-
"Wellness": {
|
| 763 |
-
"Health Prioritization": {}
|
| 764 |
-
},
|
| 765 |
-
"Goals": {
|
| 766 |
-
"Priorities": {}
|
| 767 |
-
},
|
| 768 |
-
"Identity": {
|
| 769 |
-
"CulturalAffiliation": {}
|
| 770 |
-
},
|
| 771 |
-
"Personal Philosophy": {
|
| 772 |
-
"Preferences": {},
|
| 773 |
-
"Opinions": {}
|
| 774 |
-
}
|
| 775 |
-
},
|
| 776 |
-
"Relationships and Social Networks": {
|
| 777 |
-
"Goals": {
|
| 778 |
-
"RelationshipMotivation": {}
|
| 779 |
-
},
|
| 780 |
-
"Personal Ties": {
|
| 781 |
-
"ProfessionalConnections": {}
|
| 782 |
-
},
|
| 783 |
-
"Networking": {
|
| 784 |
-
"Approach": {}
|
| 785 |
-
},
|
| 786 |
-
"Family": {
|
| 787 |
-
"Relationship with Mother": {},
|
| 788 |
-
"Family Dynamics": {},
|
| 789 |
-
"Relationship Quality": {},
|
| 790 |
-
"Support System": {},
|
| 791 |
-
"Sibling": {},
|
| 792 |
-
"Mother's Personality": {},
|
| 793 |
-
"Grandparents": {},
|
| 794 |
-
"Family Relationships": {}
|
| 795 |
-
},
|
| 796 |
-
"Family Role": {
|
| 797 |
-
"children": {}
|
| 798 |
-
},
|
| 799 |
-
"Parental Relationships": {
|
| 800 |
-
"dynamics": {}
|
| 801 |
-
},
|
| 802 |
-
"Social Skills": {
|
| 803 |
-
"Social Reach": {}
|
| 804 |
-
},
|
| 805 |
-
"Professional": {
|
| 806 |
-
"Community_Involvement": {},
|
| 807 |
-
"Knowledge_Experience": {}
|
| 808 |
-
},
|
| 809 |
-
"Professional Skills": {
|
| 810 |
-
"Networking": {},
|
| 811 |
-
"Entrepreneurship": {}
|
| 812 |
-
},
|
| 813 |
-
"Social Role": {
|
| 814 |
-
"Mentorship_Role": {},
|
| 815 |
-
"Youth_Engagement": {},
|
| 816 |
-
"Impact": {},
|
| 817 |
-
"Family_Role": {}
|
| 818 |
-
},
|
| 819 |
-
"Interactions": {
|
| 820 |
-
"User Intent": {}
|
| 821 |
-
},
|
| 822 |
-
"Connections": {
|
| 823 |
-
"Personal Network": {}
|
| 824 |
-
},
|
| 825 |
-
"Peers": {
|
| 826 |
-
"Dynamics": {}
|
| 827 |
-
},
|
| 828 |
-
"Social": {
|
| 829 |
-
"Personalization Level": {}
|
| 830 |
-
},
|
| 831 |
-
"Relationship": {
|
| 832 |
-
"Family_Context": {}
|
| 833 |
-
}
|
| 834 |
-
},
|
| 835 |
-
"Emotional and Relational Skills": {
|
| 836 |
-
"Engagement": {
|
| 837 |
-
"Motivation": {}
|
| 838 |
-
},
|
| 839 |
-
"CommunicationSkills": {
|
| 840 |
-
"EmotionalAttributes": {},
|
| 841 |
-
"CommunicationStyle": {}
|
| 842 |
-
},
|
| 843 |
-
"SelfAwareness": {
|
| 844 |
-
"Personal Growth Techniques": {}
|
| 845 |
-
},
|
| 846 |
-
"Personality": {
|
| 847 |
-
"Empathy": {}
|
| 848 |
-
},
|
| 849 |
-
"OpenMindedness": {
|
| 850 |
-
"ReceptivityToInnovation": {}
|
| 851 |
-
},
|
| 852 |
-
"Patience": {
|
| 853 |
-
"level": {}
|
| 854 |
-
},
|
| 855 |
-
"Resilience": {
|
| 856 |
-
"Journey": {}
|
| 857 |
-
},
|
| 858 |
-
"WorkLifeBalance": {
|
| 859 |
-
"Preferences": {}
|
| 860 |
-
},
|
| 861 |
-
"Romantic": {
|
| 862 |
-
"RelationshipBuilding": {}
|
| 863 |
-
},
|
| 864 |
-
"EmotionalIntelligence": {
|
| 865 |
-
"Emotional_Sensitivity": {}
|
| 866 |
-
}
|
| 867 |
-
},
|
| 868 |
-
"Psychological and Cognitive": {
|
| 869 |
-
"User Characteristics": {
|
| 870 |
-
"Personal Characteristics": {}
|
| 871 |
-
}
|
| 872 |
-
},
|
| 873 |
-
"Lifestyle and Habits": {
|
| 874 |
-
"Daily Routine": {
|
| 875 |
-
"Home Usage Frequency": {}
|
| 876 |
-
}
|
| 877 |
-
},
|
| 878 |
-
"Core Values, Beliefs, Philosophy": {
|
| 879 |
-
"Worldview": {
|
| 880 |
-
"Nationalistic Views": {}
|
| 881 |
-
}
|
| 882 |
-
},
|
| 883 |
-
"Core Values and Philosophy": {
|
| 884 |
-
"Beliefs": {
|
| 885 |
-
"Outcome-Oriented": {}
|
| 886 |
-
}
|
| 887 |
-
},
|
| 888 |
-
"Lifestyle and Routine": {
|
| 889 |
-
"Personal Habits": {
|
| 890 |
-
"User Personalization Attributes": {}
|
| 891 |
-
}
|
| 892 |
-
},
|
| 893 |
-
"Cultural and Social Contexts": {
|
| 894 |
-
"Community": {
|
| 895 |
-
"Engagement Level": {}
|
| 896 |
-
}
|
| 897 |
-
}
|
| 898 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
generation_user_profile/output/user_profile.json
DELETED
|
@@ -1,383 +0,0 @@
|
|
| 1 |
-
{
|
| 2 |
-
"basic_info": {
|
| 3 |
-
"age": 45,
|
| 4 |
-
"gender": "male",
|
| 5 |
-
"occupation": {
|
| 6 |
-
"status": "engineer"
|
| 7 |
-
},
|
| 8 |
-
"location": {
|
| 9 |
-
"city": "Shanghai",
|
| 10 |
-
"country": "China"
|
| 11 |
-
}
|
| 12 |
-
},
|
| 13 |
-
"values_orientation": "Pragmatism over ideals, self-protection, and low expectations. I don’t believe people always act in good faith, so I value caution more than trust.",
|
| 14 |
-
"life_attitude": {
|
| 15 |
-
"outlook": "Life is mostly about enduring rather than enjoying. I take each day as it comes, without too much hope or illusion, just trying to get through with as little disappointment as possible.",
|
| 16 |
-
"coping_mechanism": "Custom life attitude provided by user"
|
| 17 |
-
},
|
| 18 |
-
"personal_story": {
|
| 19 |
-
"personal_story": "Story 1: At 30, while leading a project in a multinational firm in Shanghai, he discovered a colleague manipulating technical reports to secure a contract. Instead of confronting the issue openly, he chose to document everything quietly and protect himself, fearing backlash. This experience reinforced his belief that people do not always act in good faith and shaped his pragmatic approach to work and relationships. Later, at 42, after a significant project failure due to overreliance on idealistic teamwork without safeguards, he adopted a cautious stance, setting low expectations to avoid disappointment. These incidents cultivated his preference for pragmatism over ideals and a cautious, self-protective life attitude.",
|
| 20 |
-
"key_life_events": [
|
| 21 |
-
"Story 1: Discovered colleague's manipulation of reports at age 30",
|
| 22 |
-
"Story 1: Project failure due to idealistic teamwork at age 42"
|
| 23 |
-
]
|
| 24 |
-
},
|
| 25 |
-
"interests_and_hobbies": {
|
| 26 |
-
"interests": [
|
| 27 |
-
"analytical report writing",
|
| 28 |
-
"strategic risk assessment"
|
| 29 |
-
]
|
| 30 |
-
},
|
| 31 |
-
"selected_attributes": [
|
| 32 |
-
"Demographic Information.Age.General",
|
| 33 |
-
"Hobbies, Interests, and Lifestyle.Interests.Movies",
|
| 34 |
-
"Hobbies, Interests, and Lifestyle.Interests.Cooking",
|
| 35 |
-
"Education and Learning.background.Finance Skills",
|
| 36 |
-
"Physical and Health Characteristics.Health Profile.Vitamin Levels",
|
| 37 |
-
"Media Consumption and Engagement.Books.ContentPreferences",
|
| 38 |
-
"Psychological and Cognitive Aspects.Mindset.UserPreferences",
|
| 39 |
-
"Psychological and Cognitive Aspects.Shame.triggers",
|
| 40 |
-
"Core Values, Beliefs, and Philosophy.PersonalGrowth.Resilience",
|
| 41 |
-
"Lifestyle and Daily Routine.Daily Routine.ShoppingHabits",
|
| 42 |
-
"Hobbies, Interests, and Lifestyle.Photography.User Preferences",
|
| 43 |
-
"Cultural and Social Context.Linguistic.Style",
|
| 44 |
-
"Hobbies, Interests, and Lifestyle.Communication.UserStyle.preference",
|
| 45 |
-
"Demographic Information.Background.Cultural Background",
|
| 46 |
-
"Psychological and Cognitive Aspects.Innovation.Openness",
|
| 47 |
-
"Psychological and Cognitive Aspects.Openness.Educational Background",
|
| 48 |
-
"Hobbies, Interests, and Lifestyle.Events.UserParticipationInterest",
|
| 49 |
-
"Demographic Information.Age.Youth",
|
| 50 |
-
"Core Values and Beliefs.Wellness.Health Prioritization",
|
| 51 |
-
"Psychological and Cognitive Aspects.Thinking Style.personality_traits",
|
| 52 |
-
"Lifestyle and Daily Routine.Travel.Experience",
|
| 53 |
-
"Core Values, Beliefs, and Philosophy.Beliefs.Philosophy",
|
| 54 |
-
"Core Values, Beliefs, and Philosophy.Wellness.Approach_and_Attitudes",
|
| 55 |
-
"Psychological and Cognitive Aspects.Risk Tolerance.Proficiency",
|
| 56 |
-
"Demographic Information.Personal.Interests",
|
| 57 |
-
"Hobbies, Interests, and Lifestyle.Spirituality.personal_interest",
|
| 58 |
-
"Education and Learning.FocusArea.Domain",
|
| 59 |
-
"Lifestyle and Daily Routine.Location.Community",
|
| 60 |
-
"Relationships and Social Networks.Goals.RelationshipMotivation",
|
| 61 |
-
"Psychological and Cognitive Aspects.Pattern Recognition.ability",
|
| 62 |
-
"Cultural and Social Context.Cultural.Mental Health Advocate",
|
| 63 |
-
"Hobbies, Interests, and Lifestyle.Interests.Design",
|
| 64 |
-
"Education and Learning.learningApproach.ContinuousIntegration",
|
| 65 |
-
"Media Consumption and Engagement.reddit.user_attributes",
|
| 66 |
-
"Hobbies, Interests, and Lifestyle.Interests.LanguageLearning.knowledge",
|
| 67 |
-
"Hobbies, Interests, and Lifestyle.Gardening.UserExperience",
|
| 68 |
-
"Emotional and Relational Skills.Engagement.Motivation",
|
| 69 |
-
"Media Consumption and Engagement.Preferences.User Engagement",
|
| 70 |
-
"Hobbies, Interests, and Lifestyle.Interests.Lifestyle",
|
| 71 |
-
"Hobbies, Interests, and Lifestyle.Travel Interests.Membership Preferences",
|
| 72 |
-
"Lifestyle and Daily Routine.Dietary Preferences.dietaryConsiderations",
|
| 73 |
-
"Hobbies, Interests, and Lifestyle.Interests.Sustainability",
|
| 74 |
-
"Psychological and Cognitive Aspects.Thinking Patterns.cognitiveProcess",
|
| 75 |
-
"Media Consumption and Engagement.Music.AnalysisDepth",
|
| 76 |
-
"Hobbies, Interests, and Lifestyle.Interests.PhilosophyTopics",
|
| 77 |
-
"Lifestyle and Daily Routine.Cooking.SkillLevel",
|
| 78 |
-
"Media Consumption and Engagement.SocialMedia.User Preferences.use",
|
| 79 |
-
"Relationships and Social Networks.Personal Ties.ProfessionalConnections",
|
| 80 |
-
"Hobbies, Interests, and Lifestyle.Interests.Scenarios",
|
| 81 |
-
"Education and Learning.programmingSkills.ExpertiseLevel",
|
| 82 |
-
"Hobbies, Interests, and Lifestyle.Creative Interests.ProfessionalArea",
|
| 83 |
-
"Psychological and Cognitive Aspects.Engagement",
|
| 84 |
-
"Psychological and Cognitive Aspects.Challenges.CognitiveAbilities",
|
| 85 |
-
"Cultural and Social Context.Community.Volunteer Activities",
|
| 86 |
-
"Hobbies, Interests, and Lifestyle.Interests.Culture",
|
| 87 |
-
"Cultural and Social Context.Food Preferences.FoodPreferences",
|
| 88 |
-
"Physical and Health Characteristics.weight.personal_targets",
|
| 89 |
-
"Hobbies, Interests, and Lifestyle.Art Interests.UserPreferences",
|
| 90 |
-
"Demographic Information.Travel Preferences.Frequent Traveler",
|
| 91 |
-
"Cultural and Social Context.Personal Attitudes.Recovery Orientation",
|
| 92 |
-
"Education and Learning.interests.Preferences",
|
| 93 |
-
"Education and Learning.background.Prior Experience",
|
| 94 |
-
"Psychological and Cognitive Aspects.Personality.Perfectionism",
|
| 95 |
-
"Physical and Health Characteristics.Beliefs.Philosophy",
|
| 96 |
-
"Cultural and Social Context.Social.Personal Identity",
|
| 97 |
-
"Demographic Information.birth_date.specific_date",
|
| 98 |
-
"Media Consumption and Engagement.PlatformPreference.User Type",
|
| 99 |
-
"Cultural and Social Context.Food Preferences.Restrictions",
|
| 100 |
-
"Media Consumption and Engagement.Books.UserPreferences",
|
| 101 |
-
"Hobbies, Interests, and Lifestyle.Interests.UniqueExperiences",
|
| 102 |
-
"Psychological and Cognitive Aspects.Perspective.PersonalAttributes",
|
| 103 |
-
"Physical and Health Characteristics.Dietary Preferences.ProteinIntakeGoals",
|
| 104 |
-
"Education and Learning.language_proficiency.LearningAttributes",
|
| 105 |
-
"Lifestyle and Daily Routine.Daily Routine.TravelPreferences",
|
| 106 |
-
"Cultural and Social Context.PersonalContext.GeographicBackground",
|
| 107 |
-
"Physical and Health Characteristics.Thinking Patterns.Goal-Oriented",
|
| 108 |
-
"Psychological and Cognitive Aspects.Personality Traits.Interpersonal Dynamics",
|
| 109 |
-
"Physical and Health Characteristics.Oral Health.SpecificDentalCondition",
|
| 110 |
-
"Relationships and Social Networks.Networking.Approach",
|
| 111 |
-
"Physical and Health Characteristics.Personal Health Factors.Alcohol Use History",
|
| 112 |
-
"Media Consumption and Engagement.Celebrities.FavoriteCelebrities",
|
| 113 |
-
"Relationships and Social Networks.Family.Relationship with Mother",
|
| 114 |
-
"Education and Learning.interests.Hobbies & Interests",
|
| 115 |
-
"Cultural and Social Context.Personal Customs.Traditional Practices",
|
| 116 |
-
"Cultural and Social Context.Communication.CommunicationNorms",
|
| 117 |
-
"Psychological and Cognitive Aspects.Needs.reliability",
|
| 118 |
-
"Education and Learning.FieldOfStudy.interests",
|
| 119 |
-
"Demographic Information.Life Stage.Maturity Level",
|
| 120 |
-
"Core Values and Beliefs.Goals.Priorities",
|
| 121 |
-
"Hobbies, Interests, and Lifestyle.Interests.Gardening",
|
| 122 |
-
"Lifestyle and Daily Routine.Time Management.QualityOfLife",
|
| 123 |
-
"Cultural and Social Context.Life Stage.Teenager",
|
| 124 |
-
"Education and Learning.interests.Professional Interests",
|
| 125 |
-
"Cultural and Social Context.Company Culture.Adaptability",
|
| 126 |
-
"Cultural and Social Context.Theme.Social Context",
|
| 127 |
-
"Demographic Information.Family.Household Composition",
|
| 128 |
-
"Relationships and Social Networks.Family Role.children",
|
| 129 |
-
"Hobbies, Interests, and Lifestyle.Culinary Preferences.culinaryPreferences",
|
| 130 |
-
"Physical and Health Characteristics.Dietary.UserPreferences",
|
| 131 |
-
"Relationships and Social Networks.Parental Relationships.dynamics",
|
| 132 |
-
"Hobbies, Interests, and Lifestyle.Interests.Sports",
|
| 133 |
-
"Core Values, Beliefs, and Philosophy.Travel_values.authentic_culture",
|
| 134 |
-
"Education and Learning.highestLevel.Higher Education",
|
| 135 |
-
"Media Consumption and Engagement.digital_tool_usage.familiarity_with_automation_tools",
|
| 136 |
-
"Media Consumption and Engagement.QuestionStyle",
|
| 137 |
-
"Media Consumption and Engagement.Literature.SciFiGenres",
|
| 138 |
-
"Cultural and Social Context.Personal Culture.Values",
|
| 139 |
-
"Emotional and Relational Skills.CommunicationSkills.EmotionalAttributes",
|
| 140 |
-
"Psychological and Cognitive Aspects.Response.ToAnger",
|
| 141 |
-
"Psychological and Cognitive Aspects.Tone Preference",
|
| 142 |
-
"Core Values, Beliefs, and Philosophy.PersonalGrowth.PersonalBackground",
|
| 143 |
-
"Hobbies, Interests, and Lifestyle.Business Interests.UserInterests",
|
| 144 |
-
"Hobbies, Interests, and Lifestyle.Interests.Wellness.practices",
|
| 145 |
-
"Hobbies, Interests, and Lifestyle.Interests.Food.preparation",
|
| 146 |
-
"Education and Learning.preferences.Content Presentation",
|
| 147 |
-
"Education and Learning.familiarity.ExperienceLevel",
|
| 148 |
-
"Hobbies, Interests, and Lifestyle.Interests.SelfImprovement",
|
| 149 |
-
"Lifestyle and Daily Routine.Stress Management.general",
|
| 150 |
-
"Relationships and Social Networks.Social Skills.Social Reach",
|
| 151 |
-
"Relationships and Social Networks.Family.Family Dynamics",
|
| 152 |
-
"Education and Learning.competency.Cognitive and Productivity Skills",
|
| 153 |
-
"Relationships and Social Networks.Professional.Community_Involvement",
|
| 154 |
-
"Lifestyle and Daily Routine.Shopping.OnlineBehavior",
|
| 155 |
-
"Core Values, Beliefs, and Philosophy.Lifestyle.PersonalValues",
|
| 156 |
-
"Education and Learning.personalDevelopment.Interests",
|
| 157 |
-
"Demographic Information.Age.LifeStage",
|
| 158 |
-
"Relationships and Social Networks.Family.Relationship Quality",
|
| 159 |
-
"Hobbies, Interests, and Lifestyle.Children.Relevance",
|
| 160 |
-
"Demographic Information.Community.Engagement",
|
| 161 |
-
"Cultural and Social Context.Financial Behavior.Risk Tolerance",
|
| 162 |
-
"Psychological and Cognitive.User Characteristics.Personal Characteristics",
|
| 163 |
-
"Core Values, Beliefs, and Philosophy.learning_attitude.openness",
|
| 164 |
-
"Physical and Health Characteristics.Cognitive Style.Reflective Development",
|
| 165 |
-
"Media Consumption and Engagement.Preferences.User Preferences",
|
| 166 |
-
"Education and Learning.experience_level.AI",
|
| 167 |
-
"Psychological and Cognitive Aspects.Openness.Interest in Technology",
|
| 168 |
-
"Lifestyle and Habits.Daily Routine.Home Usage Frequency",
|
| 169 |
-
"Hobbies, Interests, and Lifestyle.Projects.DroneTechnology",
|
| 170 |
-
"Hobbies, Interests, and Lifestyle.Dietary Preferences.User Interests",
|
| 171 |
-
"Cultural and Social Context.Life Experiences.Variety",
|
| 172 |
-
"Psychological and Cognitive Aspects.Motivation.Wellness",
|
| 173 |
-
"Relationships and Social Networks.Professional Skills.Networking",
|
| 174 |
-
"Media Consumption and Engagement.content_engagement.personal_beliefs",
|
| 175 |
-
"Hobbies, Interests, and Lifestyle.Interests.Groups",
|
| 176 |
-
"Media Consumption and Engagement.preferred_channels.communication_channels",
|
| 177 |
-
"Relationships and Social Networks.Family.Support System",
|
| 178 |
-
"Lifestyle and Daily Routine.Activities.Family Structure",
|
| 179 |
-
"Relationships and Social Networks.Social Role.Mentorship_Role",
|
| 180 |
-
"Education and Learning.subject_area.interests",
|
| 181 |
-
"Core Values, Beliefs, Philosophy.Worldview.Nationalistic Views",
|
| 182 |
-
"Demographic Information.Information.Age",
|
| 183 |
-
"Relationships and Social Networks.Interactions.User Intent",
|
| 184 |
-
"Hobbies, Interests, and Lifestyle.Interests.Storytelling",
|
| 185 |
-
"Demographic Information.Education.Proficiency",
|
| 186 |
-
"Hobbies, Interests, and Lifestyle.Interests.Seasons",
|
| 187 |
-
"Cultural and Social Context.Religion.ReligiousEngagement",
|
| 188 |
-
"Physical and Health Characteristics.Health Goals.health_improvement",
|
| 189 |
-
"Hobbies, Interests, and Lifestyle.Interests.SocialContributions",
|
| 190 |
-
"Education and Learning.specific_interests",
|
| 191 |
-
"Lifestyle and Daily Routine.Travel Preferences.User Preferences",
|
| 192 |
-
"Hobbies, Interests, and Lifestyle.Outdoor Activities.Camping",
|
| 193 |
-
"Media Consumption and Engagement.story_prefs.genres",
|
| 194 |
-
"Media Consumption and Engagement.FavoriteAuthors.Historical",
|
| 195 |
-
"Cultural and Social Context.Religion.Religion",
|
| 196 |
-
"Emotional and Relational Skills.SelfAwareness.Personal Growth Techniques",
|
| 197 |
-
"Lifestyle and Daily Routine.Cooking.TimeAvailability",
|
| 198 |
-
"Media Consumption and Engagement.Preferred Platforms.Libraries",
|
| 199 |
-
"Education and Learning.academic_background.CreativeWorks",
|
| 200 |
-
"Hobbies, Interests, and Lifestyle.Entrepreneurial Interests.Business_Strategy",
|
| 201 |
-
"Core Values, Beliefs, and Philosophy.Philosophy.generalAttributes",
|
| 202 |
-
"Core Values and Beliefs.Identity.CulturalAffiliation",
|
| 203 |
-
"Psychological and Cognitive Aspects.Motivation.Learning",
|
| 204 |
-
"Lifestyle and Daily Routine.Sports.endurance_sports",
|
| 205 |
-
"Relationships and Social Networks.Connections.Personal Network",
|
| 206 |
-
"Psychological and Cognitive Aspects.Anxiety.Level",
|
| 207 |
-
"Hobbies, Interests, and Lifestyle.Creative Interests.CognitiveTools",
|
| 208 |
-
"Core Values and Philosophy.Beliefs.Outcome-Oriented",
|
| 209 |
-
"Psychological and Cognitive Aspects.Personality.Introversion",
|
| 210 |
-
"Psychological and Cognitive Aspects.Resilience.PersonalExperience",
|
| 211 |
-
"Psychological and Cognitive Aspects.Personal Insight.Level of Self-Awareness",
|
| 212 |
-
"Cultural and Social Context.Personal Interests.Academic Interests",
|
| 213 |
-
"Hobbies, Interests, and Lifestyle.Gaming.UserInterest",
|
| 214 |
-
"Education and Learning.degree.Specialization",
|
| 215 |
-
"Lifestyle and Daily Routine.Wellness.Personalized Routine",
|
| 216 |
-
"Education and Learning.academicFocus.Interests",
|
| 217 |
-
"Psychological and Cognitive Aspects.Motivation.Goals",
|
| 218 |
-
"Psychological and Cognitive Aspects.Stress Management.WorkLifeAttributes",
|
| 219 |
-
"Psychological and Cognitive Aspects.Problem Solving.analyticalSkills",
|
| 220 |
-
"Cultural and Social Context.Community.Involvement",
|
| 221 |
-
"Media Consumption and Engagement.Artistic.Interests",
|
| 222 |
-
"Relationships and Social Networks.Family.Sibling",
|
| 223 |
-
"Cultural and Social Context.cultural.personal_information",
|
| 224 |
-
"Cultural and Social Context.Language.Proficiency",
|
| 225 |
-
"Emotional and Relational Skills.Personality.Empathy",
|
| 226 |
-
"Core Values, Beliefs, and Philosophy.Values.Discipline",
|
| 227 |
-
"Hobbies, Interests, and Lifestyle.Interests.HistoricalThemes",
|
| 228 |
-
"Hobbies, Interests, and Lifestyle.Interests.Nature",
|
| 229 |
-
"Hobbies, Interests, and Lifestyle.Interests.MusicGenres.musical_involvement.bass",
|
| 230 |
-
"Core Values and Beliefs.Personal Philosophy.Preferences",
|
| 231 |
-
"Education and Learning.FocusArea.Leadership",
|
| 232 |
-
"Core Values, Beliefs, and Philosophy.Values.Growth_Mindset",
|
| 233 |
-
"Relationships and Social Networks.Peers.Dynamics",
|
| 234 |
-
"Physical and Health Characteristics.HealthHistory.Conditions",
|
| 235 |
-
"Psychological and Cognitive Aspects.Personality.PersonalityResults",
|
| 236 |
-
"Media Consumption and Engagement.news.preferred_sources",
|
| 237 |
-
"Hobbies, Interests, and Lifestyle.Interests.Innovation",
|
| 238 |
-
"Core Values, Beliefs, and Philosophy.Interests.EthicalViews",
|
| 239 |
-
"Cultural and Social Context.Personal Values.Privacy Orientation",
|
| 240 |
-
"Psychological and Cognitive Aspects.Favorite Genres.Gaming",
|
| 241 |
-
"Cultural and Social Context.Group Involvement.Participation Level",
|
| 242 |
-
"Media Consumption and Engagement.Genre.Interactive Storytelling",
|
| 243 |
-
"Hobbies, Interests, and Lifestyle.Children.Approaches",
|
| 244 |
-
"Lifestyle and Routine.Personal Habits.User Personalization Attributes",
|
| 245 |
-
"Demographic Information.Race.Ethnicity",
|
| 246 |
-
"Hobbies, Interests, and Lifestyle.Vehicles.User Preferences",
|
| 247 |
-
"Lifestyle and Daily Routine.Shopping.ShoppingBehavior",
|
| 248 |
-
"Cultural and Social Contexts.Community.Engagement Level",
|
| 249 |
-
"Media Consumption and Engagement.SocialMedia.User Engagement",
|
| 250 |
-
"Psychological and Cognitive Aspects.Perfectionism.education_level",
|
| 251 |
-
"Lifestyle and Daily Routine.Leisure Activities.Personal Preferences",
|
| 252 |
-
"Cultural and Social Context.Social Habits.Coffee Culture Enthusiast",
|
| 253 |
-
"Hobbies, Interests, and Lifestyle.Interests.Advocacy",
|
| 254 |
-
"Media Consumption and Engagement.Engagement.User Level",
|
| 255 |
-
"Cultural and Social Context.Personal Life.Interaction Style",
|
| 256 |
-
"Hobbies, Interests, and Lifestyle.Travel Preferences.Geographic Interests",
|
| 257 |
-
"Education and Learning.motivation.educational_experience",
|
| 258 |
-
"Hobbies, Interests, and Lifestyle.User Interests.personal_preferences",
|
| 259 |
-
"Core Values, Beliefs, and Philosophy.Goals.Career Goals",
|
| 260 |
-
"Relationships and Social Networks.Social.Personalization Level",
|
| 261 |
-
"Media Consumption and Engagement.Music.ListeningPreferences",
|
| 262 |
-
"Demographic Information.Family.Role Information",
|
| 263 |
-
"Media Consumption and Engagement.Preferred Sources.Financial Information Sources",
|
| 264 |
-
"Physical and Health Characteristics.Neurodiversity.Dyslexia",
|
| 265 |
-
"Relationships and Social Networks.Social Role.Youth_Engagement",
|
| 266 |
-
"Core Values, Beliefs, and Philosophy.Values.Education",
|
| 267 |
-
"Physical and Health Characteristics.Metabolism.Basal Metabolic Rate",
|
| 268 |
-
"Lifestyle and Daily Routine.Learning.personal_dedication",
|
| 269 |
-
"Physical and Health Characteristics.Dietary Preferences.Allergies",
|
| 270 |
-
"Relationships and Social Networks.Relationship.Family_Context",
|
| 271 |
-
"Cultural and Social Context.affiliation.religious",
|
| 272 |
-
"Hobbies, Interests, and Lifestyle.Interests.PhilosophicalFields",
|
| 273 |
-
"Education and Learning.research.Interests",
|
| 274 |
-
"Demographic Information.income.level",
|
| 275 |
-
"Hobbies, Interests, and Lifestyle.Hobbies.interests",
|
| 276 |
-
"Demographic Information.Economic Status.Budget",
|
| 277 |
-
"Hobbies, Interests, and Lifestyle.Interests.Science",
|
| 278 |
-
"Physical and Health Characteristics.Beliefs.AttitudesTowardsDrugs",
|
| 279 |
-
"Media Consumption and Engagement.Gaming.UsagePreferences",
|
| 280 |
-
"Demographic Information.Gender.Identity",
|
| 281 |
-
"Lifestyle and Daily Routine.Work Schedule.attribute",
|
| 282 |
-
"Core Values, Beliefs, and Philosophy.Morality.relationship_preferences",
|
| 283 |
-
"Education and Learning.skillLevel.Diversity of Skills",
|
| 284 |
-
"Education and Learning.level_of_expertise.technology",
|
| 285 |
-
"Hobbies, Interests, and Lifestyle.Writing.experience_level",
|
| 286 |
-
"Hobbies, Interests, and Lifestyle.Entertainment Interests.Industry",
|
| 287 |
-
"Cultural and Social Context.Religion.ReligiousType",
|
| 288 |
-
"Relationships and Social Networks.Family.Mother's Personality",
|
| 289 |
-
"Psychological and Cognitive Aspects.Personality.AdventureSeeking",
|
| 290 |
-
"Demographic Information.Gender.Preferences",
|
| 291 |
-
"Psychological and Cognitive Aspects.Mindfulness.Personal Development",
|
| 292 |
-
"Hobbies, Interests, and Lifestyle.Travel Interests.Destination Preferences",
|
| 293 |
-
"Physical and Health Characteristics.Health Conditions.Neurodevelopmental Conditions",
|
| 294 |
-
"Media Consumption and Engagement.SpaceRelatedMedia",
|
| 295 |
-
"Media Consumption and Engagement.RecipeSources.OnlineBlogs",
|
| 296 |
-
"Demographic Information.Age.SpecificAge",
|
| 297 |
-
"Media Consumption and Engagement.sciFiThemes",
|
| 298 |
-
"Core Values, Beliefs, and Philosophy.Cultural.Cultural Awareness",
|
| 299 |
-
"Cultural and Social Context.Community.Impact",
|
| 300 |
-
"Cultural and Social Context.DietaryPreferences.personal_preferences",
|
| 301 |
-
"Physical and Health Characteristics.Medical History.Allergy_Management",
|
| 302 |
-
"Education and Learning.subject_matter.Topic",
|
| 303 |
-
"Physical and Health Characteristics.General Health.Wellbeing",
|
| 304 |
-
"Psychological and Cognitive Aspects.Curiosity.IntellectualEngagement",
|
| 305 |
-
"Emotional and Relational Skills.OpenMindedness.ReceptivityToInnovation",
|
| 306 |
-
"Hobbies, Interests, and Lifestyle.Interests.GameDevelopment",
|
| 307 |
-
"Demographic Information.Age.MiddleAged",
|
| 308 |
-
"Core Values, Beliefs, and Philosophy.Beliefs.Social Values",
|
| 309 |
-
"Emotional and Relational Skills.Patience.level",
|
| 310 |
-
"Demographic Information.Age.Group",
|
| 311 |
-
"Hobbies, Interests, and Lifestyle.Goals.Physical_Activity",
|
| 312 |
-
"Psychological and Cognitive Aspects.User Interaction.PreferredEngagementStyle",
|
| 313 |
-
"Psychological and Cognitive Aspects.Math Skills.proficiency_level",
|
| 314 |
-
"Hobbies, Interests, and Lifestyle.Interests.Reading",
|
| 315 |
-
"Emotional and Relational Skills.CommunicationSkills.CommunicationStyle",
|
| 316 |
-
"Core Values, Beliefs, and Philosophy.Life_perspective.worldview",
|
| 317 |
-
"Education and Learning.knowledgeArea.Personal Interests",
|
| 318 |
-
"Emotional and Relational Skills.Resilience.Journey",
|
| 319 |
-
"Physical and Health Characteristics.neurodiversity.add-inattentive",
|
| 320 |
-
"Hobbies, Interests, and Lifestyle.Interests.Literature",
|
| 321 |
-
"Core Values, Beliefs, and Philosophy.Values.Work_Ethic",
|
| 322 |
-
"Lifestyle and Daily Routine.Home Setup.UserPreferences",
|
| 323 |
-
"Hobbies, Interests, and Lifestyle.Interests.Film",
|
| 324 |
-
"Cultural and Social Context.Personal Values.Inclusivity Focus",
|
| 325 |
-
"Core Values, Beliefs, and Philosophy.PersonalGrowth.Orientation",
|
| 326 |
-
"Cultural and Social Context.Beliefs.Lifestyle_Attitudes",
|
| 327 |
-
"Media Consumption and Engagement.streaming_service.preferences",
|
| 328 |
-
"Education and Learning.degree.field_of_study",
|
| 329 |
-
"Physical and Health Characteristics.Body.Body Type.Normal",
|
| 330 |
-
"Emotional and Relational Skills.WorkLifeBalance.Preferences",
|
| 331 |
-
"Psychological and Cognitive Aspects.Personality.Empathy",
|
| 332 |
-
"Relationships and Social Networks.Professional.Knowledge_Experience",
|
| 333 |
-
"Media Consumption and Engagement.ArtisticInspirations",
|
| 334 |
-
"Education and Learning.academic_achievements.education",
|
| 335 |
-
"Core Values and Beliefs.Personal Philosophy.Opinions",
|
| 336 |
-
"Psychological and Cognitive Aspects.Personality.Preference",
|
| 337 |
-
"Relationships and Social Networks.Family.Grandparents",
|
| 338 |
-
"Relationships and Social Networks.Social Role.Impact",
|
| 339 |
-
"Hobbies, Interests, and Lifestyle.Preferences.activities",
|
| 340 |
-
"Lifestyle and Daily Routine.Retirement.Age",
|
| 341 |
-
"Demographic Information.Gender.Demographics",
|
| 342 |
-
"Demographic Information.RelocationWillingness",
|
| 343 |
-
"Core Values, Beliefs, and Philosophy.WorkEthic.Values",
|
| 344 |
-
"Psychological and Cognitive Aspects.Productivity.SkillLevel",
|
| 345 |
-
"Education and Learning.skillLevel.Analytical Skills",
|
| 346 |
-
"Cultural and Social Context.Preference.Language Preferences",
|
| 347 |
-
"Core Values, Beliefs, and Philosophy.EnvironmentalConcerns.Sustainability Advocate",
|
| 348 |
-
"Psychological and Cognitive Aspects.Language Complexity.Preference",
|
| 349 |
-
"Physical and Health Characteristics.Skin.UserPreferences",
|
| 350 |
-
"Lifestyle and Daily Routine.Sleep.environment",
|
| 351 |
-
"Psychological and Cognitive Aspects.Behavioral Patterns.Personal Traits",
|
| 352 |
-
"Relationships and Social Networks.Social Role.Family_Role",
|
| 353 |
-
"Psychological and Cognitive Aspects.Mental Well-being.Stable",
|
| 354 |
-
"Demographic Information.Age.GroupCategory",
|
| 355 |
-
"Psychological and Cognitive Aspects.Emotional.EmotionalAttributes",
|
| 356 |
-
"Relationships and Social Networks.Professional Skills.Entrepreneurship",
|
| 357 |
-
"Psychological and Cognitive Aspects.Political Views.orientation",
|
| 358 |
-
"Emotional and Relational Skills.Romantic.RelationshipBuilding",
|
| 359 |
-
"Cultural and Social Context.Values.EthicalValues",
|
| 360 |
-
"Education and Learning.writingSkills.Level",
|
| 361 |
-
"Psychological and Cognitive Aspects.Goals.Long-Term Strategy",
|
| 362 |
-
"Demographic Information.Age.SuitableContent",
|
| 363 |
-
"Physical and Health Characteristics.Skin.SkinType",
|
| 364 |
-
"Emotional and Relational Skills.EmotionalIntelligence.Emotional_Sensitivity",
|
| 365 |
-
"Cultural and Social Context.Beliefs.Personal_Interests",
|
| 366 |
-
"Cultural and Social Context.Health Perspectives.Aging Attitudes",
|
| 367 |
-
"Media Consumption and Engagement.Engagement.User Technical Proficiency",
|
| 368 |
-
"Lifestyle and Daily Routine.Pet Ownership.PersonalizationAttribute",
|
| 369 |
-
"Hobbies, Interests, and Lifestyle.Financial Interests.investment_goals",
|
| 370 |
-
"Relationships and Social Networks.Family.Family Relationships",
|
| 371 |
-
"Cultural and Social Context.Financial Preference.Budget Conscious",
|
| 372 |
-
"Physical and Health Characteristics.Fitness Level.Current Status",
|
| 373 |
-
"Core Values, Beliefs, and Philosophy.Ethics.Dietary_Preferences",
|
| 374 |
-
"Media Consumption and Engagement.meme.knowledge",
|
| 375 |
-
"Media Consumption and Engagement.Language.LanguageAttributes",
|
| 376 |
-
"Hobbies, Interests, and Lifestyle.Professional Interests.General Interests",
|
| 377 |
-
"Psychological and Cognitive Aspects.Risk Tolerance.General",
|
| 378 |
-
"Hobbies, Interests, and Lifestyle.Academic Interests.Personal Interests",
|
| 379 |
-
"Cultural and Social Context.Health Practices.Traditional Approaches",
|
| 380 |
-
"Core Values, Beliefs, and Philosophy.Educational_goals.TemporalPerspective",
|
| 381 |
-
"Psychological and Cognitive Aspects.Creativity.PersonalStyle"
|
| 382 |
-
]
|
| 383 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|