关系从句与复杂句式构建
简介
关系从句(Relative Clauses)是英语中用于连接和扩展信息的重要句式。它使用关系代词(who, whom, whose, which, that)将两个简单句合并为一个复杂句,从而使表达更加精炼和专业。在商务英语中,关系从句大量出现在报告、提案和专业文档中,能够在一个句子中传达多层信息。
掌握关系从句后,你可以: - 撰写简洁而信息丰富的商务文档 - 避免句子过于简短和断裂 - 准确表达复杂的逻辑关系 - 提升英文写作的专业性和流畅度
根据统计,专业商务文档中约25%的句子包含至少一个关系从句,而日常对话中仅占10%。
关系从句分类体系
graph TB
A[关系从句系统] --> B[限定性关系从句
Defining/Restrictive] A --> C[非限定性关系从句
Non-defining/Non-restrictive] B --> B1[必不可少
不用逗号隔开] B --> B2[关系代词可省略
如果作宾语] B --> B3[可用that替代
who/which] C --> C1[补充信息
用逗号隔开] C --> C2[关系代词不可省略] C --> C3[不能用that
只用who/which] B1 --> B1A["例: The employee who works hard gets promoted.
指特定员工,不用逗号"] C1 --> C1A["例: John, who works hard, got promoted.
补充信息,用逗号"] style A fill:#e1f5ff style B fill:#fff4e6 style C fill:#e8f5e9 style B1A fill:#ffebee style C1A fill:#f3e5f5
Defining/Restrictive] A --> C[非限定性关系从句
Non-defining/Non-restrictive] B --> B1[必不可少
不用逗号隔开] B --> B2[关系代词可省略
如果作宾语] B --> B3[可用that替代
who/which] C --> C1[补充信息
用逗号隔开] C --> C2[关系代词不可省略] C --> C3[不能用that
只用who/which] B1 --> B1A["例: The employee who works hard gets promoted.
指特定员工,不用逗号"] C1 --> C1A["例: John, who works hard, got promoted.
补充信息,用逗号"] style A fill:#e1f5ff style B fill:#fff4e6 style C fill:#e8f5e9 style B1A fill:#ffebee style C1A fill:#f3e5f5
关系从句分析器代码
"""
关系从句分析与构建器
帮助理解和创建正确的关系从句
"""
from dataclasses import dataclass
from typing import List, Optional
from enum import Enum
class ClauseType(Enum):
"""关系从句类型"""
DEFINING = "限定性关系从句"
NON_DEFINING = "非限定性关系从句"
class RelativePronoun(Enum):
"""关系代词"""
WHO = "who" # 人(主格)
WHOM = "whom" # 人(宾格,正式)
WHOSE = "whose" # 所有格
WHICH = "which" # 物
THAT = "that" # 人或物(限定性从句)
WHERE = "where" # 地点
WHEN = "when" # 时间
@dataclass
class RelativeClause:
"""关系从句结构"""
main_clause: str # 主句
relative_pronoun: str # 关系代词
relative_clause: str # 关系从句
clause_type: ClauseType # 从句类型
can_omit_pronoun: bool # 关系代词是否可省略
class RelativeClauseAnalyzer:
"""关系从句分析器"""
def __init__(self):
self.examples_database = self._initialize_examples()
def _initialize_examples(self) -> dict:
"""初始化关系从句示例库"""
return {
"who_subject": RelativeClause(
main_clause="The manager",
relative_pronoun="who",
relative_clause="leads our team is very experienced",
clause_type=ClauseType.DEFINING,
can_omit_pronoun=False # 主格不能省略
),
"who_object": RelativeClause(
main_clause="The colleague",
relative_pronoun="(whom)",
relative_clause="I work with is from Malaysia",
clause_type=ClauseType.DEFINING,
can_omit_pronoun=True # 宾格可省略
),
"which_subject": RelativeClause(
main_clause="The system",
relative_pronoun="which",
relative_clause="processes our data is very efficient",
clause_type=ClauseType.DEFINING,
can_omit_pronoun=False
),
"which_object": RelativeClause(
main_clause="The report",
relative_pronoun="(which)",
relative_clause="I submitted yesterday was approved",
clause_type=ClauseType.DEFINING,
can_omit_pronoun=True
),
"whose": RelativeClause(
main_clause="The developer",
relative_pronoun="whose",
relative_clause="code is excellent got promoted",
clause_type=ClauseType.DEFINING,
can_omit_pronoun=False # whose永远不能省略
),
"non_defining": RelativeClause(
main_clause="Our CEO, ",
relative_pronoun="who",
relative_clause="has 20 years of experience, will lead the meeting",
clause_type=ClauseType.NON_DEFINING,
can_omit_pronoun=False # 非限定性从句不能省略
)
}
def combine_sentences(self, sentence1: str, sentence2: str,
common_element: str, pronoun: str) -> dict:
"""将两个简单句合并为带关系从句的复杂句"""
import re
# 从sentence2中移除公共元素(大小写不敏感)
s2_remainder = re.sub(re.escape(common_element), '', sentence2,
count=1, flags=re.IGNORECASE).strip()
# 限定性从句: 去掉sentence1末尾句号后接 pronoun + s2_remainder
combined_defining = f"{sentence1.rstrip('.')} {pronoun} {s2_remainder}"
# 非限定性从句: 在sentence1的公共元素后插入", pronoun"
s1_with_pronoun = re.sub(
re.escape(common_element),
f"{common_element}, {pronoun}",
sentence1,
count=1,
flags=re.IGNORECASE
).rstrip('.')
combined_non_defining = f"{s1_with_pronoun} {s2_remainder}"
return {
"原句1": sentence1,
"原句2": sentence2,
"限定性从句": combined_defining,
"非限定性从句": combined_non_defining,
"建议": "如果信息必不可少用限定性,如果是补充信息用非限定性"
}
def choose_pronoun(self, antecedent_type: str, role: str) -> dict:
"""根据先行词类型和语法角色选择关系代词"""
recommendations = {
("person", "subject"): {
"formal": "who",
"informal": "that",
"note": "主格,人"
},
("person", "object"): {
"formal": "whom",
"informal": "who/that (或省略)",
"note": "宾格,人"
},
("person", "possessive"): {
"formal": "whose",
"informal": "whose",
"note": "所有格,人"
},
("thing", "subject"): {
"formal": "which",
"informal": "that",
"note": "主格,物"
},
("thing", "object"): {
"formal": "which",
"informal": "that (或省略)",
"note": "宾格,物"
},
("thing", "possessive"): {
"formal": "whose/of which",
"informal": "whose",
"note": "所有格,物"
}
}
key = (antecedent_type.lower(), role.lower())
return recommendations.get(key, {"error": "无效的组合"})
def analyze_sentence(self, sentence: str) -> dict:
"""分析句子中的关系从句"""
relative_pronouns = ["who", "whom", "whose", "which", "that", "where", "when"]
found_pronouns = []
for pronoun in relative_pronouns:
if f" {pronoun} " in f" {sentence.lower()} ":
found_pronouns.append(pronoun)
# 检测是否为非限定性从句(简化检测:看逗号)
has_comma = "," in sentence
clause_type = ClauseType.NON_DEFINING if has_comma else ClauseType.DEFINING
return {
"has_relative_clause": len(found_pronouns) > 0,
"pronouns_found": found_pronouns,
"clause_type": clause_type.value if found_pronouns else None,
"is_defining": clause_type == ClauseType.DEFINING,
"has_commas": has_comma
}
def common_errors_check(self, sentence: str) -> List[str]:
"""检查常见的关系从句错误"""
errors = []
# 错误1: 非限定性从句使用that
if ", that" in sentence.lower():
errors.append("非限定性从句不能使用that,应该用who/which")
# 错误2: 非限定性从句缺少逗号
if " who " in sentence or " which " in sentence:
if "," not in sentence:
# 可能是限定性从句,不一定是错误
pass
# 错误3: 重复的主语
pronouns = ["who", "which", "that"]
for pronoun in pronouns:
if f"{pronoun} he " in sentence.lower() or f"{pronoun} it " in sentence.lower():
errors.append(f"关系从句中不应重复主语: '{pronoun}' 后不需要 he/she/it")
# 错误4: whose后面直接跟动词(缺少名词)
if " whose is " in sentence.lower() or " whose are " in sentence.lower():
errors.append("whose后面应该跟名词,不能直接跟动词")
return errors if errors else ["未发现明显错误"]
def generate_practice(self, base_noun: str, noun_type: str) -> dict:
"""生成关系从句练习"""
if noun_type.lower() == "person":
return {
"限定性_主格": f"The {base_noun} who works here is experienced.",
"限定性_宾格": f"The {base_noun} (whom/that) I met is from Malaysia.",
"限定性_所有格": f"The {base_noun} whose project won is talented.",
"非限定性": f"John, who is our {base_noun}, will present today."
}
else: # thing
return {
"限定性_主格": f"The {base_noun} which/that works well is expensive.",
"限定性_宾格": f"The {base_noun} (which/that) I bought is good.",
"限定性_所有格": f"The {base_noun} whose design is modern sold quickly.",
"非限定性": f"This {base_noun}, which is new, is very efficient."
}
# 演示使用
if __name__ == "__main__":
analyzer = RelativeClauseAnalyzer()
# 1. 查看关系从句示例
print("=" * 60)
print("关系从句示例库")
print("=" * 60)
for key, example in analyzer.examples_database.items():
full_sentence = f"{example.main_clause} {example.relative_pronoun} {example.relative_clause}"
print(f"\n类型: {key}")
print(f"完整句: {full_sentence}")
print(f"从句类型: {example.clause_type.value}")
print(f"可省略代词: {'是' if example.can_omit_pronoun else '否'}")
# 2. 合并句子
print("\n" + "=" * 60)
print("句子合并示例")
print("=" * 60)
result = analyzer.combine_sentences(
"The employee works in our office.",
"The employee won the award.",
"The employee",
"who"
)
for key, value in result.items():
print(f"{key}: {value}")
# 3. 选择正确的关系代词
print("\n" + "=" * 60)
print("关系代词选择指南")
print("=" * 60)
cases = [
("person", "subject"),
("person", "object"),
("thing", "subject"),
("thing", "possessive")
]
for antecedent, role in cases:
recommendation = analyzer.choose_pronoun(antecedent, role)
print(f"\n先行词: {antecedent}, 角色: {role}")
print(f" 正式: {recommendation.get('formal')}")
print(f" 非正式: {recommendation.get('informal')}")
print(f" 说明: {recommendation.get('note')}")
# 4. 分析具体句子
print("\n" + "=" * 60)
print("句子分析")
print("=" * 60)
test_sentences = [
"The manager who leads our team is experienced.",
"Our CEO, who has 20 years of experience, will speak.",
"The report I submitted was approved."
]
for sentence in test_sentences:
analysis = analyzer.analyze_sentence(sentence)
print(f"\n句子: {sentence}")
print(f"包含关系从句: {analysis['has_relative_clause']}")
print(f"关系代词: {', '.join(analysis['pronouns_found']) if analysis['pronouns_found'] else '无(可能省略)'}")
print(f"类型: {analysis['clause_type']}")
# 5. 错误检查
print("\n" + "=" * 60)
print("常见错误检查")
print("=" * 60)
error_sentences = [
"The manager, that leads our team, is experienced.",
"The person who he works with is nice.",
"The employee whose is talented got promoted."
]
for sentence in error_sentences:
errors = analyzer.common_errors_check(sentence)
print(f"\n句子: {sentence}")
print(f"错误: {'; '.join(errors)}")
# 6. 生成练习
print("\n" + "=" * 60)
print("练习生成: manager (person)")
print("=" * 60)
practice = analyzer.generate_practice("manager", "person")
for clause_type, example in practice.items():
print(f"{clause_type}: {example}")
关系从句对比表
| 特征 | 限定性关系从句 | 非限定性关系从句 |
|---|---|---|
| 作用 | 限定先行词,必不可少 | 补充信息,可去掉 |
| 标点 | 不用逗号 | 必须用逗号 |
| 关系代词 | who, whom, whose, which, that | who, whom, whose, which (不能用that) |
| 可省略代词 | 宾格时可省略 | 不可省略 |
| 例句 | The email that I sent was urgent. | The email, which I sent yesterday, was urgent. |
关系代词选择指南
| 先行词 | 语法角色 | 正式 | 非正式 | 例句 |
|---|---|---|---|---|
| 人 | 主格 | who | who/that | The manager who leads... |
| 人 | 宾格 | whom | who/that (可省略) | The colleague (whom) I know... |
| 人 | 所有格 | whose | whose | The employee whose project... |
| 物 | 主格 | which | which/that | The system which processes... |
| 物 | 宾格 | which | which/that (可省略) | The report (which) I wrote... |
| 物 | 所有格 | whose/of which | whose | The company whose revenue... |
| 地点 | - | where | where | The office where I work... |
| 时间 | - | when | when | The day when we met... |
商务场景中的关系从句
1. 员工描述
限定性: The employee who completed the training will get promoted.
(特指完成培训的员工)
非限定性: John, who completed the training last month, will get promoted.
(补充John的信息)
2. 产品和服务说明
限定性: The product which reduces costs by 30% is our bestseller.
(特指这款产品)
非限定性: Our new product, which was launched last quarter, reduces costs by 30%.
(补充产品信息)
3. 公司和团队介绍
Our company, which was founded in 2010, specializes in AI solutions.
The team that won the award consists of 10 developers.
4. 会议和活动描述
The meeting (which/that) we had yesterday was productive.
The conference, which will be held in Kuala Lumpur, focuses on technology.
关系从句使用最佳实践
1. 限定性 vs 非限定性的选择
- 如果去掉从句,句意不完整 → 限定性(无逗号)
- 如果去掉从句,句意仍完整 → 非限定性(有逗号)
2. 避免过长的关系从句
❌ 冗长: The manager who leads the team that develops the product which was launched last year is experienced.
✅ 改进: The manager of the team that launched last year's product is experienced.
3. 宾格关系代词的省略
在非正式商务写作中,宾格关系代词常省略:
正式: The report which I submitted was approved.
非正式: The report I submitted was approved.
4. That vs Which的区别
- 限定性从句: 两者都可以,that更常用
- 非限定性从句: 只能用which
5. 介词位置
正式: The project about which I spoke is important.
非正式: The project (which) I spoke about is important.
正式: The colleague with whom I work is talented.
非正式: The colleague (who) I work with is talented.
6. 避免双重主语
❌ 错误: The manager who he leads our team...
✅ 正确: The manager who leads our team...
小结
关系从句是构建复杂专业句式的关键工具。通过掌握限定性和非限定性关系从句的区别,以及正确选择关系代词,你可以: 1. 在一个句子中传达多层信息 2. 使文档表达更加精炼和专业 3. 避免句子过于简短和断裂
记住核心要点: - 限定性从句:必不可少,无逗号,可用that - 非限定性从句:补充信息,有逗号,不用that - 关系代词选择:根据先行词(人/物)和角色(主/宾/所有格)
建议每天练习将2-3组简单句合并为带关系从句的复杂句,逐步提升写作的复杂度和专业性。
下一章:第二章 中文母语者常见英语错误清单